链接:Leetcode
难度等级:Easy
给你一个字符串 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”。
思路:从前往后依次遍历字符串的字符。维护一个变量curLen记录当前单词的长度,维护一个变量LastLen记录上一个单词的长度。若当前字符为空格,且curLen不为0,表示前一个位置为单词的结束。将LastLen赋值为curLen的值,同时将curLen置0;若当前字符不是空格,说明该单词仍未结束,则curLen自增1。
当整个字符串遍历完后,判断curLen是否为0。若其为0,则表示最后字符串最后不是空格,直接返回curLen;若curLen表示最后为空格,则返回LastLen。
时间复杂度:O(N)
空间复杂度:O(1)
class Solution {
fun lengthOfLastWord(s: String): Int {
var curLen = 0
var lastLen = 0
for (pos in 0 until s.length) {
var curChar = s.get(pos)
if (curChar == ' ' && curLen != 0) {
lastLen = curLen
curLen = 0
}
if (curChar != ' ') {
curLen++
}
}
return if (curLen != 0) {
curLen
} else {
lastLen
}
}
}
PS:看了LeetCode的官方解法,发现我的解法还是太蠢了,从后往前遍历会方便很多,贴一下官方的答案。
class Solution {
public int lengthOfLastWord(String s) {
int index = s.length() - 1;
while (s.charAt(index) == ' ') {
index--;
}
int wordLength = 0;
while (index >= 0 && s.charAt(index) != ' ') {
wordLength++;
index--;
}
return wordLength;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/length-of-last-word/solution/zui-hou-yi-ge-dan-ci-de-chang-du-by-leet-51ih/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。