【1805. 字符串中不同整数的数目】
创始人
2024-03-21 13:16:22

来源:力扣(LeetCode)

描述:

给你一个字符串 word ,该字符串由数字和小写英文字母组成。

请你用空格替换每个不是数字的字符。例如,"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。注意,剩下的这些整数为(相邻彼此至少有一个空格隔开):"123""34""8""34"

返回对 word 完成替换后形成的 不同 整数的数目。

只有当两个整数的 不含前导零 的十进制表示不同, 才认为这两个整数也不同。

示例 1:

输入:word = "a123bc34d8ef34"
输出:3
解释:不同的整数有 "123"、"34" 和 "8" 。注意,"34" 只计数一次。

示例 2:

输入:word = "leet1234code234"
输出:2

示例 3:

输入:word = "a1b01c001"
输出:1
解释:"1"、"01" 和 "001" 视为同一个整数的十进制表示,因为在比较十进制值时会忽略前导零的存在。

提示:

  • 1 <= word.length <= 1000
  • word 由数字和小写英文字母组成

方法:双指针

  对于每个字符串中的整数部分,使用指针 p1 指向整数部分的第一个字符,指针 p2 指向整数部分最后一个字符的下一个位置。为了去除前导零,如果 p2 − p1 > 1 且 word[p1] = ‘0’ ,我们将 p1 前移一位,即 p1 = p1 + 1 。将区间 [p1, p2) 对应的字符串插入到哈希集合中,最终字符串中不同整数的数目等于哈希集合的元素数目。

代码:

class Solution {
public:int numDifferentIntegers(string word) {unordered_set s;int n = word.size(), p1 = 0, p2;while (true) {while (p1 < n && !isdigit(word[p1])) {p1++;}if (p1 == n) {break;}p2 = p1;while (p2 < n && isdigit(word[p2])) {p2++;}while (p2 - p1 > 1 && word[p1] == '0') { // 去除前导 0p1++;}s.insert(word.substr(p1, p2 - p1));p1 = p2;}return s.size();}
};

1

复杂度分析
时间复杂度: O(n),其中 n 是字符串 word 的长度。
空间复杂度: O(n)。哈希集合需要占用 O(n) 的空间。
author:力扣官方题解

相关内容

热门资讯

学习时节丨“十五五”开新局,总... 今年是“十五五”开局之年,如何确保开好局、起好步?近日,习近平总书记在省部级主要领导干部学习贯彻党的...
2026北京两会|2026年北... (来源:北京商报)北京商报讯(记者 魏蔚)1月27日,在北京市十六届人大四次会议第二次全体会上,北京...
佛山某5000余人小区换物业上... 距离原定的旧物业退场时间已过去两个多月,佛山市南海区狮山镇君湖天下花园的新旧物业交接工作仍未完成。这...
影石公布打击黑水军阶段性成果,... 1月27日,影石创新(Insta360)在其法务部微博发布声明,公布“打击黑公关”线索征集阶段性成果...
比特币 Layer 2 项目 ... (来源:吴说)由 Founders Fund 与 Galaxy 支持的比特币 Layer 2 项目 ...