题目: 最后一个单词的长度
描述:
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = “Hello World”
输出:5
解释:最后一个单词是“World”,长度为5。
方法一:最后一个单词的长度 = 末尾字母位置 - 首字母位置 + 1
我们直接从后遍历该字符串,先找到最后一个单词的末尾,当我们第一次遇到s[i]!=’ ',那么此时即为最后一
个单词的结尾,最后一个单词的首字母有2种情况:
- 第一种是首字母就是字符串第一个元素,此时首字母前面没有空格
- 第二种是首字母不是字符串的第一个元素,此时首字母前面肯定是空格,而我们要找到首字母前面的空格不仅需要满足s[i]==’ ',还要满足这个空格之后的元素不等于空格,这么做的目的是防止我们找到的是最后一个单词后面的空格。
时间复杂度:o(n)
空间复杂度:o(1)
int lengthOfLastWord(string s) {
int end = 0;
for(int i = s.size()-1;i>=0;i--){
if(s[i]!=' '&&end == 0){//找到最后一个单词的结尾
end = i;
}
if(i<s.size()-1&&s[i]==' '&&s[i+1]!=' '){//限制该空格为最后一个单词前面的空格
return end - i;
}
}
return end+1;//前面没找到空格,那么首字母就是第一个元素
}
说明一下代码第4行end==0的原因,这样做是找到最后一个单词的末尾元素后不再更新end的值,也就是当end更改过就停止更改。