58.最后一个单词的长度
题目内容
给你一个字符串 s,由若干单词组成,单词之间用单个或多个连续的空格字符隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例
输入:s = "Hello World"
输出:5
输入:s = " "
输出:0
提示
1 <= s.length <= 104s仅有英文字母和空格' '组成
解题思路
先说说我拿到题的第一想法吧。通过调用字符串的split()方法,通过空格分开每个单词,再定位到最后一个单词上,用for循环来计算最后一个单词的个数。但是定位不到最后一个单词的下标,以失败告终。(想法还是太简单)
后来想着换个思路,从字符串末尾开始向前遍历,其中主要有两种情况:
-
第一种情况,以字符串"Hello World"为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词"World"的长度5
-
第二种情况,以字符串"Hello World "为例,需要先将末尾的空格过滤掉,再进行第一种情况的操作,即认为最后一个单词为"World",长度为5
所以完整过程为先从后过滤掉空格找到单词尾部,再从尾部向前遍历,找到单词头部,最后两者相减,即为单词的长度
时间复杂度:O(n),n为结尾空格和结尾单词总体长度
解题答案
class Solution {
public int lengthOfLastWord(String s) {
//从后往前 直到找到空格处
int cnt = 0;
for(int i = s.length() - 1;i >= 0;i--){
if(s.charAt(i) != ' '){
cnt++;
}
else if(cnt != 0){
return cnt;
}
}
return cnt;
}
}
文章有写的不好的地方,还请大佬们不吝赐教!!
LeetCode刷题链接放下面啦!
明天也要继续加油鸭!