【每日算法】LeetCode 58 —— 最后一个单词长度(一百五十)

题目内容

给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例

示例 1:

输入:s = “Hello World”
输出:5

示例 2:

输入:s = “ “
输出:0

提示

1、1 <= s.length <= 10^4
2、s 仅有英文字母和空格 ‘ ‘ 组成

题解

本题可以使用语言提供的API来求解,也可以使用双指针的思想求解,这里给出双指针的思路。

首先,定义i和j两个指针用于搜索满足条件的字符

然后,让两个指针从字符串的末尾开始往前遍历。先把末尾的空格处理掉,让i搜索到最后一个单词的开头,然后让j继续往前走,走到其遇到可空格

最后,返回i-j就是最后一个单词的长度。

代码

// //使用stringStream求解。
// class Solution {
// public:
// int lengthOfLastWord(string s) {
// stringstream ssin(s);
// int res = 0;
// string word;
// while(ssin >> word) res = word.size();

// return res;
// }
// };

class Solution {
public:
int lengthOfLastWord(string s) {
//双指针算法,从后往前遍历
for(int i = s.size() - 1; i >= 0; i--){
if(s[i] == ' ') continue;
int j = i - 1;
while(j >= 0 && s[j] != ' ') j--;
return i - j;
}
return 0;
}
};
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/05/24/【每日算法】LeetCode-58-——-最后一个单词长度(一百五十)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号