58. 最后一个单词的长度
题目
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
提示:
1 <= s.length <= 104
s
仅有英文字母和空格' '
组成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”。
题解
力扣上关于字符串的题目中有一类很特殊,就是给一个字符串组成的句子(带空格或标点),然后对句中单个字符串进行一系列处理的题目。核心思想,就是先把句子中所有字符串取出放入字符串数组,而遍历句子取字符串的思路,就是遇到字符把它放入临时字符串,遇到空格或者标点(如果有标点),就把临时字符串输出,并且清空
如果有前后置空格,那么必须判断临时字符串非空才能输出,否则会输出空串
模板如下:
s += " "; //这里在最后一个字符位置加上空格,这样最后一个字符串就不会遗漏
string temp = ""; //临时字符串
vector<string> res; //存放字符串的数组
for (char ch : s) //遍历字符句子
{
if (ch == ' ') //遇到空格
{
if (!temp.empty()) //临时字符串非空
{
res.push_back(temp);
temp.clear(); //清空临时字符串
}
}
else
temp += ch;
}
本题:
class Solution {
public:
int lengthOfLastWord(string s) {
if (s.empty())
return 0;
s += " ";
vector<string> res;
string temp;
for(char ch :s){
if(ch == ' '){
if(!temp.empty()){
res.push_back(temp);
temp.clear();
}
}else{
temp += ch;
}
}
if (res.empty())
return 0;
return res.back().size();
}
};
C++相关语法: <string>
头文件中的常用函数
s.empty()
:判断字符串是否为空。s.clear()
:清除字符串。s.pop_back()
:去掉最后一个字符。