题目描述
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World"
输出:5
示例 2:
输入:s = " fly me to the moon "
输出:4
示例 3:
输入:s = "luffy is still joyboy"
输出:6
提示:
1 <= s.length <= 104
s 仅有英文字母和空格 ' ' 组成
s 中至少存在一个单词
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/length-of-last-word
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路解法
遇到字符串问题我的几个想法是:
- 二分查找空格
字符串是非有序数组,所以如何二分查找 - 双指针
如何确认前进还是后退? - 位运算(加快运算速度)
(todo) 位运算加快速度的调查与研究 - 递归查找空格
10^4 这么多的数据栈空间够用不够用?
(todo) 一个递归函数可以被嵌套多深? - 暴力法
暴力法试试。
class Solution {
public:
int lengthOfLastWord(string s) {
int begin = 0;
int end = -1;
auto IsSpace = [](char &c) -> bool { return (c == ' '); };
bool is_space;
for (int i = s.size() - 1; i >= 0; i--) {
is_space = IsSpace(s[i]);
if (is_space) {
if (end == -1) {
continue;
} else {
begin = i;
break;
}
} else {
if (end == -1) {
end = i;
}
}
}
if (s[begin] != ' ') {
return (end - begin) + 1;
}
return (end - begin);
}
};