1. 程式人生 > 其它 >每日一練(38):最後一個單詞的長度

每日一練(38):最後一個單詞的長度


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/problems/length-of-last-word

方法一:雙指標法

思路分析

定義兩個指標指向字串的末尾,若字串末尾為空格,指標同時前移 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; 
}