题解
统计整数个数
1 条题解
-
0
解题思路
题目要我们数一数字符串里有几个"整数"。这里的整数就是一段连续的数字。比如 "welldone 378 and 5 and 789" 里,数字 3、7、8 连在一起组成 "378",数字 5 是 "5",数字 7、8、9 连在一起组成 "789",一共 3 个整数。
所以这道题其实是在数"有多少段连续的数字":
- 用一个变量
cnt记录整数个数,一开始是0。 - 用一个"光标"
i从字符串开头往右走。 - 如果当前字符是数字('0'~'9'),说明我们发现了一个新整数的开头,
cnt加1;然后让i一直往右走,把这一整段连续的数字全部跳过。 - 如果当前字符不是数字,就让
i继续往右走,去找下一个数字。
注意:因为字符串里可能有空格,读入的时候要用
getline把一整行都读进来,而不能用cin>>(cin 遇到空格会停下来,只能读到单词)。参考代码
// 统计整数个数:数一数字符串里由连续数字组成的整数有几个 #include <iostream> #include <string> using namespace std; int main(){ string s; getline(cin,s); // 整行读入(字符串里可能含空格) int cnt=0; for(int i=0;i<s.size();i++){ if(s[i]>='0'&&s[i]<='9'){ // 发现一个数字开头 cnt++; // 整数个数加1 while(i<s.size()&&s[i]>='0'&&s[i]<='9') i++; // 跳过这串连续数字 } } cout<<cnt<<'\n'; return 0; }复杂度分析
- 时间复杂度:O(L),L 是字符串长度(不超过500)。字符串里的每个字符最多被
i走过一次,i只会往前走、绝不回头。 - 空间复杂度:O(L),用来存这个字符串。
- 用一个变量
- 1