58. 最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为 5。
示例 2:
输入:s = " fly me to the moon "
输出:4
解释:最后一个单词是“moon”,长度为 4。
示例 3:
输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为 6 的“joyboy”。
提示:
1 <= s.length <= 104s仅有英文字母和空格' '组成s中至少存在一个单词
题解:
我自己的解法:
class Solution {
public int lengthOfLastWord(String s) {
int endlength = 0;// 最后一个单词的长度
int nowlength = 0;// 现在遍历的单词的长度
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != ' ') { // 如果当前字母不为空则更新当前单词长度
nowlength++;
endlength = nowlength;//将当前单词长度赋值给endlength,就算后续全是空格,endlength长度也不会变了
}else{//如果为空则重置当前单词长度,但不影响最后一个单词的长度
nowlength = 0;
}
}
return endlength;
}
}
思路
看示例 2,s = " fly me to the moon ",为了计算最后一个单词的长度,我们需要计算最后一个单词的首尾字母的下标:
单词最后一个字母的下标,也就是最后一个非空格字符的下标,记作 i。上例中 i 是字母 n 的下标。
单词第一个字母的下标,我们可以找到在 i 左边的最近空格的下标,记作 j,那么 j+1 就是这个单词的第一个字母的下标。如果左边没有空格,那么 j=−1。
单词长度为
i−j
作者:灵茶山艾府
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public int lengthOfLastWord(String s) {
int i = s.length() - 1;
// 只有条件为 `true` 的时候,才会进入循环体执行代码;条件变成 `false`,立刻终止循环,跳到 while 后面。
while (s.charAt(i) == ' ') {//所以,只要遇到最后一个字母,就退出循环,此时i就是最后一个单词的最后一个字母的下标
i--;
}
int j = i - 1;//j为离单词最近的,即左侧的空白的下标,初始j为i的左边,i-1
while (j >= 0 && s.charAt(j) != ' ') {// 当遍历到不为空白,继续向左遍历,直到空白停止循环
j--;
}
return i - j; // 单词长度为两个下标相减
}
}
