title: 每日一練(38):最后一個(gè)單詞的長度
categories:[劍指offer]
tags:[每日一練]
date: 2022/04/09
每日一練(38):最后一個(gè)單詞的長度
給你一個(gè)字符串 s省古,由若干單詞組成粥庄,單詞前后用一些空格字符隔開。返回字符串中 最后一個(gè) 單詞的長度衫樊。
單詞 是指僅由字母組成飒赃、不包含任何空格字符的最大子字符串。
示例 1:
輸入:s = "Hello World"
輸出:5
解釋:最后一個(gè)單詞是“World”科侈,長度為5载佳。
示例 2:
輸入:s = " fly me to the moon "
輸出:4
解釋:最后一個(gè)單詞是“moon”,長度為4臀栈。
示例 3:
輸入:s = "luffy is still joyboy"
輸出:6
解釋:最后一個(gè)單詞是長度為6的“joyboy”蔫慧。
提示:
1 <= s.length <= 104
s 僅有英文字母和空格 ' ' 組成
s 中至少存在一個(gè)單詞
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/length-of-last-word
方法一:雙指針法
思路分析
定義兩個(gè)指針指向字符串的末尾,若字符串末尾為空格权薯,指針同時(shí)前移 i--; j--;
若遇到非空格姑躲,那么固定 j 不動(dòng)睡扬,表示單詞的末尾位置,繼續(xù)前移 i ,直到再次遇到空格黍析,或者遍歷完字符串卖怜;
最后,i 指向的位置是最后一個(gè)單詞開頭的前一個(gè)位置阐枣, j - i 即為最后一個(gè)單詞的長度马靠。
int lengthOfLastWord(string s) {
int i = s.size() - 1; //定義兩個(gè)指針指向字符串的末尾
int j = i;
while (s[i] == ' ') {
i--;
j--;
}
//此時(shí)i,j指向最后一個(gè)單詞的末尾位置
while (i >= 0 && s[i] != ' ') {
i--;
}
return j - i; //得到最后一個(gè)單詞的長度
}
方法二:反向遍歷
思路分析
從最后一個(gè)字母開始繼續(xù)反向遍歷字符串,直到遇到空格或者到達(dá)字符串的起始位置蔼两。遍歷到的每個(gè)字母都是最后一個(gè)單詞中的字母甩鳄,因此遍歷到的字母數(shù)量即為
最后一個(gè)單詞的長度
int lengthOfLastWord(string s) {
int index = s.size() - 1;
while (s[index] == ' ') {
index--;
}
//此時(shí)index指向最后一個(gè)字符串的的末尾
int wordLength = 0;
while (index >= 0 && s[index] != ' ') {
wordLength++; //通過遍歷得到最后一個(gè)字符串的長度
index--;
}
return wordLength;
}