字符串中的单词数
难度:
标签:
题目描述
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
示例:
输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。
代码结果
运行时间: 20 ms, 内存: 16.0 MB
/**
* 思路:
* 使用Java Stream API来解决这个问题。首先用正则表达式拆分字符串,然后使用流来过滤空字符串,最后计算单词个数。
*/
import java.util.Arrays;
public class Solution {
public long countSegments(String s) {
return Arrays.stream(s.split(" "))
.filter(str -> !str.isEmpty())
.count();
}
}
解释
方法:
该题解的思路是遍历字符串,用一个标志变量flag来记录当前是否处于一个单词内。如果当前字符不是空格且flag为0,说明遇到了一个新单词,word计数加1,并将flag置为1。如果当前字符是空格,则将flag置为0。如果当前字符不是空格且flag为1,说明还在当前单词内,不做操作。最后返回word即可得到单词数量。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
为什么需要使用标志变量`flag`来跟踪是否位于单词内,而不是直接通过检查前一个字符是否为空格来判断?
▷🦆
在这个算法中,如果字符串以空格开始或结束,这对单词计数有什么影响?算法是否能准确处理这种情况?
▷🦆
算法是否能正确处理字符串中连续多个空格的情况,这些空格是否会影响单词的计数结果?
▷🦆
如果输入字符串包含其他空白字符(如制表符或换行符),此算法是否需要调整?
▷