题目描述
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
示例: :
输入: “Hello, my name is John”
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以“Hello,”算作一个单词。
思路分析
难度是简单 ,我们直接遍历即可,这里可以分为两步:
- 对字符串进行前导空格与后置空格的预处理;
- 计算预处理后的特定空格字符的个数;
步骤1 预处理 是为了在统计特定空格字符时不被前导空格字符干扰,这里直接调用String.trim()
即可;步骤2 计算特定空格字符个数 即指那些本身为空格,且后置字符为非空格的字符 ,没有仅仅计算空格字符是为了统一那些多个空格连续的情况,我们已经在步骤1 中将可能存在于字符串末尾的空格去除了,所以这里不存在**“空格+null”** 的情况;
特殊说明:
查询的特殊字符串位于预处理后字符串内部,故结果需要进行加1后返回。
解题代码
public static int solution(String s) {
if(s == null || s.length() == 0) return 0;
int res = 0;
s = s.trim();
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == ' '
&& i + 1 < s.length()
&& s.charAt(i + 1) != ' ')
res++;
}
return ++res;
}
复杂度分析
这里我们设n
为输入字符串的长度;
时间复杂度: 我们对输入的字符串均进行了一次遍历,故时间复杂度为O(n)
;
空间复杂度: 我们没有借助辅助容器, 故空间复杂度为O(1)
;
Github源码
完整可运行文件请访问GitHub。