【每日一题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.
|
2月前
|
存储 程序员 C语言
C语言中如何通过指针引用字符串
C语言中如何通过指针引用字符串
C4.
33 0
|
2月前
|
算法 C语言
OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)
OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)
|
2月前
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
【每日一题Day301】LC2337移动片段得到字符串 | 双指针 计分
32 0
|
2月前
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
22 0
|
2月前
|
算法 C语言
通过指针引用字符串
通过指针引用字符串
29 1
|
2月前
DAY-2 | 哈希表、指针与区间划分:字符种数统计问题
```markdown ## 题干 [牛客网链接](https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50) ## 题解 1. **查表法(哈希表)**:利用数组标记出现过的 ASCII 值小于127的字符,首次出现计数,重复则忽略。 2. **指针与区间划分(回头法)**:遍历字符串,对每个字符检查其前所有字符是否重复,重复则不计数。 ## 方法总结 - 哈希表在去重问题中非常实用,可多做相关练习。 - 使用`continue`时注意避免死循环,确保循环变量会改变。 - 多回顾此类问题以巩固理解。 ```
29 2
|
2月前
|
存储 C++
C++程序中的字符串与指针
C++程序中的字符串与指针
20 2
|
2月前
|
C语言
C语言指针与字符串
C语言指针与字符串
14 0
|
2月前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
24 0
|
2月前
|
安全 C语言
指针与字符串:C语言中的深入探索
指针与字符串:C语言中的深入探索
34 0