每日演算法----最後一個單詞的長度----2020/10/15

Srwici發表於2020-10-15

1. 題目描述

給定一個僅包含大小寫字母和空格 ’ ’ 的字串 s,返回其最後一個單詞的長度。如果字串從左向右滾動顯示,那麼最後一個單詞就是最後出現的單詞。

如果不存在最後一個單詞,請返回 0 。

說明:一個單詞是指僅由字母組成、不包含任何空格字元的 最大子字串。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/length-of-last-word
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

2. 示例

在這裡插入圖片描述

3. 思路

  • 從頭開始遍歷,這樣要迴圈一次字串的長度,就可以了,但是時間複雜度太高了,後來換成了從後往前遍歷,這樣就不需要遍歷整個字串,而是當遍歷一個單詞之後遇到空格就直接返回了

4. 遇上的問題

從後往前遍歷的時候會遇到兩種情況,一種結尾是以‘ ’開始的,一種是結尾以單詞開始的。這樣就會判定輸出的時候要進行進一步的判斷,確定遇到空格的時候之前的遍歷是否已經遇到過字元。

5. 具體實現程式碼

自己寫的程式碼

  • 從前往後遍歷。
class Solution {
    public int lengthOfLastWord(String s) {
        int count = 0;
        //會遇到的情況是:
        //	前面遍歷完單詞的長度之後,遇到空格之後會遇到兩種情況
        //		1.遇到空格再遇到空格
        //		2.遇到空格再遇到字元
        for(int i =0;i<s.length();i++){
        	//當遇到空格,
            if(s.charAt(i)==' '){
            	//再判斷長度,長度不能抵達最後面
                if(i<s.length()-1){
                	//當連續兩個空格,不能直接返回
                    if(s.charAt(i+1)==' ')
                        continue;
                    //如果後面不是空格證明後面還有單詞則把之前的數清0
                    else
                        count=0;
                }
                else
                    return count;
            }
            else{
                count++;
            }
        }
        return count;
    }
}

  • 從後往前遍歷
class Solution {
    public int lengthOfLastWord(String s) {
    	//count用於計數單詞長度
        int count = 0;
        //通過flag設定,返回時判斷需要
        int flag = 0;
        if("".equals(s)) return count;
        for(int i = s.length()-1;i>0;i--){
        	//當遇到單詞的時候把flag設定為空
            if(s.charAt(i)!=' '){
                flag = 1;
                count++;
            }
            //當遇到空格並且該字元前面還有不為空格的字元並且已經遍歷過單詞了,返回
            else if(s.charAt(i)==' '&&s.charAt(i-1)!=' '&&flag==1)
                return count;

        }
        if(s.charAt(0)!= ' ') count++;
        return count;
    }
}

6. 學習收穫,優秀題解一如既往的妙啊

class Solution {
    public int lengthOfLastWord(String s) {
        int end = s.length() - 1;
        //第一個遍歷去除末端所有的空格,遇到字元跳出迴圈
        while(end >= 0 && s.charAt(end) == ' ') end--;
        //證明字串中不存在單詞
        if(end < 0) return 0;
        
        int start = end;
        //從最後面的單詞末端開始遍歷,遇到空格跳出迴圈
        while(start >= 0 && s.charAt(start) != ' ') start--;
        //單詞末端到單詞前端,單詞長度
        return end - start;
    }
}

作者:guanpengchn
連結:https://leetcode-cn.com/problems/length-of-last-word/solution/hua-jie-suan-fa-58-zui-hou-yi-ge-dan-ci-de-chang-d/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

這樣的話,我的第二個題解,比他優秀一咩咩,感覺到了開心!這個題沒有官方解析,遺憾遺憾。

7 題目來源

leetCode


要自主學習!------swrici

相關文章