【每日一题Day48】LC1805字符串中不同整数的数目 | 双指针+哈希表

简介: 思路:使用双指针定位字符串中整数的起始位置和结束位置,去除前导0后,将该整数放入哈希表中,最后返回哈希表的大小即可。

字符串中不同整数的数目【LC1805】


You are given a string word that consists of digits and lowercase English letters.


You will replace every non-digit character with a space. For example, "a123bc34d8ef34" will become " 123 34 8 34". Notice that you are left with some integers that are separated by at least one space: "123", "34", "8", and "34".


Return the number of different integers after performing the replacement operations on word.


Two integers are considered different if their decimal representations without any leading zeros are different.


终于有简单题了,类似的题还挺多总结可以看这里


  • 思路:使用双指针定位字符串中整数的起始位置和结束位置,去除前导0后,将该整数放入哈希表中,最后返回哈希表的大小即可。


。如果左指针为字母,那么右移左指针,左指针为整数的起始位置

。如果右指针为数字,那么右移右指针,右指针为整数的结束位置+1


  • 实现


class Solution {
    public int numDifferentIntegers(String word) {
        Set<String> set = new HashSet<>();
        int len = word.length();
        int l = 0;        
        int r = 0;
        while (l < len && r < len){
            // 找到左边界
            while (l < len && word.charAt(l) >= 'a' && word.charAt(l) <= 'z'){
                l++;
            }
            if (l == len){
                break;
            }
            // 找到右边界
            r = l;
            while ( r < len && word.charAt(r) >= '0' && word.charAt(r) <= '9') {
                r++;
            }
            // 去除前导0
            while (l != r && word.charAt(l) == '0'){
                l++;
            }
            String num = word.substring(l, r);
            set.add(num);
            l = r + 1;
        }
        return set.size();
    }
}


。复杂度


  • 时间复杂度:O ( n )
  • 空间复杂度:O ( n )
目录
相关文章
C4.
|
6月前
|
存储 程序员 C语言
C语言中如何通过指针引用字符串
C语言中如何通过指针引用字符串
C4.
70 0
|
6月前
|
算法 C语言
OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)
OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)
|
6月前
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
51 0
|
6月前
|
算法 C语言
通过指针引用字符串
通过指针引用字符串
71 1
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
6月前
DAY-2 | 哈希表、指针与区间划分:字符种数统计问题
```markdown ## 题干 [牛客网链接](https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50) ## 题解 1. **查表法(哈希表)**:利用数组标记出现过的 ASCII 值小于127的字符,首次出现计数,重复则忽略。 2. **指针与区间划分(回头法)**:遍历字符串,对每个字符检查其前所有字符是否重复,重复则不计数。 ## 方法总结 - 哈希表在去重问题中非常实用,可多做相关练习。 - 使用`continue`时注意避免死循环,确保循环变量会改变。 - 多回顾此类问题以巩固理解。 ```
44 2
|
6月前
|
存储 C++
C++程序中的字符串与指针
C++程序中的字符串与指针
65 2
|
6月前
|
C语言
C语言指针与字符串
C语言指针与字符串
38 0
|
6月前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
57 0
|
6月前
|
安全 C语言
指针与字符串:C语言中的深入探索
指针与字符串:C语言中的深入探索
115 0