LeetCode 5713. 字符串中不同整数的数目
题目描述:
···
给你一个字符串 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" 视为同一个整数的十进制表示,因为在比较十进制值时会忽略前导零的存在。
···
//思路: 双指针算法 -- i,j 指向数字的 开始 和结束位置, 存放到哈希表, 让i指向j后边继续扫描
1 class Solution { 2 public: 3 int numDifferentIntegers(string word) { 4 //思路: 双指针算法 -- i,j 指向数字的 开始 和结束位置, 存放到哈希表, 让i指向j后边继续扫描 5 unordered_set<string> nums; 6 for(int i = 0; i< word.size(); i++) 7 { 8 if(!isdigit(word[i])) continue; 9 string s; 10 int j = i; // 双指针 11 while(j < word.size() && isdigit(word[j])) s += word[j++]; 12 int k =0; // 若有一位,则就返回0即可, 长度大于一时, 去掉前导0 13 while(k + 1 < s.size() && s[k] == '0' ) k++; 14 nums.insert(s.substr(k)) ; // 插入到哈希, 去掉k个前导后的位置开始 数字插入 15 16 i= j; 17 } 18 return nums.size(); 19 } 20 21 };

浙公网安备 33010602011771号