最后一个单词的长度
WangScaler: 一个用心创作的作者。声明:才疏学浅,如有错误,恳请指正。
题目
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
分析
既然是最后一个单词的长度,那么只需要从后往前遍历,当遇到空格或者遍历完毕时停止,遍历的长度就是我们最后一个单词的长度。
那么其次就要考虑考虑一些特殊情况了。
- 第一种就是空字符串,这种好像对我们没有什么影响。
- 第二种就是最后几个字符是空字符串。这个是很容易疏忽的一点。
起初我就是天真的以为最后一位不会出现空格。开始的代码这样写的
public static int lengthOfLastWord(String s) {
int count = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (' ' == s.charAt(i)) {
return count;
}
count++;
}
return s.trim().length();
}
提交之后,一直解答失败,一直纳闷a怎么计算出来的长度是2呢?后来才注意到a后边还有一个空格。啧啧,没对后边的空格进行处理。
答案
针对第二种情况的处理办法,我这里是加上一个标记位flag,标记最后的字符是否为空字符串,直到不是空字符串时flag为true,开始计算长度。
public static int lengthOfLastWord(String s) {
boolean flag = false;
int count = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (' ' == s.charAt(i)) {
if (flag)
return count;
continue;
}
flag = true;
count++;
}
return s.trim().length();
}
复杂度
- 时间复杂度:O(n),最差的情况就是遍历整个字符串。
- 空间复杂度:O(1),我们只需要几个变量记录我们的数据。
总结
因为我们需要最后一个字符的长度,所以进行反向遍历,自然是最简单最直接的思路,这个题没什么技术含量。最重要的就是处理后边几个空字符串的情况,我们这里采用的是标记法。而官方的示例是先倒叙遍历,如果是空字符串,则继续往下遍历。直到不是空字符串停止,接着就是我最初的思路,遇到空字符串或者遍历结束则计算长度。
都来了,点个赞再走呗!关注WangScaler,祝你升职、加薪、不提桶!