一:题目
Count the number of segments in a string, where a segment is defined to be a contiguous sequence of non-space characters.
Please note that the string does not contain any non-printable characters.
Example:
Input: "Hello, my name is John" Output: 5
计算字符串中的段数,其中一个段被定义为一个连续的非空格字符序列。
请注意,字符串中不包含任何不可打印字符。
二:解题思路
一开始简单理解为,一句话中,用空格分隔每一个单词,统计空格的个数num,num+1即为字符串中的段数,结果通不过所有的测试用例
1.如空串“”,返回结果应该i为0
2.如全部是空格“ ”,返回结果应该也为0
思路:首先要去掉字符串两端的空格,然后统计单词与单词之间的“空格数”(当前为空格,空格的下一位非空),返回“空格数”+1,即为段数
三:代码实现
class Solution {
public:
//去掉开头和结尾的空格
string trim(string s){
int i;
//去除左边的空格
for(i=0;i<s.length();i++)
if(s[i]!=' ')
break;
s=s.substr(i,s.length()-i);
//去除右面的空格
for(i=s.length()-1;i>=0;i--)
if(s[i]!=' ')
break;
s=s.substr(0,i+1);
return s;
}
int countSegments(string s) {
//判断字符串是否长度为0或者都是空格(去掉空格后,长度也为0),如果是则字段为0
s=trim(s);
if(s.length()==0)
return 0;
//把字符串两端的空格都去掉
int i;
int j=0;
for(int i=0;i<s.length()-1;i++){
//空格减去‘A’是-33.如果这个字符是空格,但是下一个字符不是空格,则是一个字段
if(s[i]==' ' && s[i+1]!=' ')
j++;
}
return j+1;
}
};