别人在那看漫画,我在LeetCode刷算法:最后一个单词的长度
不点蓝字,我们哪来故事?
给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World"
输出:5示例 2:
输入:s = " "
输出:0提示:
1 <= s.length <= 10^4
s 仅有英文字母和空格 ' ' 组成
解题思路
求最后一个单词的长度,首先想到的应该是将这个字符串从后往前遍历:
首先获取一个”右指针“right = 字符串长度 - 1。
当碰到空格时,right左移(right--)。
设定一个”临时指针“tmp等于right的当前值。
这一步是为了消除字符串的末尾存在多个空格的情况。
当碰到非空格时,tmp左移(tmp--),直到碰到空格。
此时,tmp相当于末尾单词的头部下标,right相当于末尾单词的尾部下标,right - tmp即为单词长度。
public int lengthOfLastWord(String s) {
int right = s.length() - 1;
if (right < 0) {
return 0;
}
while (right >= 0 && s.charAt(right) == ' ') {
right--;
}
int tmp = right;
while (tmp >= 0 && s.charAt(tmp) != ' ') {
tmp--;
}
return right - tmp;
}
复杂度分析
时间复杂度:O(n),n 为结尾空格和结尾单词总体长度。
Hi
感谢你的到来
我不想错过你
编程那些烦心事