title: 每日一練(38):最後一個單詞的長度
categories:[劍指offer]
tags:[每日一練]
date: 2022/04/09
每日一練(38):最後一個單詞的長度
給你一個字串 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”。
提示:
1 <= s.length <= 104
s 僅有英文字母和空格 ' ' 組成
s 中至少存在一個單詞
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
方法一:雙指標法
思路分析
定義兩個指標指向字串的末尾,若字串末尾為空格,指標同時前移 i--; j--;
若遇到非空格,那麼固定 j 不動,表示單詞的末尾位置,繼續前移 i ,直到再次遇到空格,或者遍歷完字串;
最後,i 指向的位置是最後一個單詞開頭的前一個位置, j - i 即為最後一個單詞的長度。
int lengthOfLastWord(string s) {
int i = s.size() - 1; //定義兩個指標指向字串的末尾
int j = i;
while (s[i] == ' ') {
i--;
j--;
}
//此時i,j指向最後一個單詞的末尾位置
while (i >= 0 && s[i] != ' ') {
i--;
}
return j - i; //得到最後一個單詞的長度
}
方法二:反向遍歷
思路分析
從最後一個字母開始繼續反向遍歷字串,直到遇到空格或者到達字串的起始位置。遍歷到的每個字母都是最後一個單詞中的字母,因此遍歷到的字母數量即為
最後一個單詞的長度
int lengthOfLastWord(string s) {
int index = s.size() - 1;
while (s[index] == ' ') {
index--;
}
//此時index指向最後一個字串的的末尾
int wordLength = 0;
while (index >= 0 && s[index] != ' ') {
wordLength++; //通過遍歷得到最後一個字串的長度
index--;
}
return wordLength;
}