Length of Last Word思路解析和各種方法介紹

今天做的是LeetCode58.

目的是找到字符串中的最後一個單詞的長度
如果最後爲一個空格,說明不存在,或者字符串本身就是空的 ,也會返回0
但有一點是以前沒有注意到的,如果字符串是被一堆空格組成的,返回的也是空格的個數
所以思路整理如下:
如果最後一個爲空格或者長度爲0,返回0
否則從後向前遍歷,返回到空格之前的長度


但後來發現是有問題的,如"a ",雖然是第一個字符串,但也是最後一個字符串


應該設立一種機制,從後到前開始遍歷
在遇見第一個空格的時候,如果len不爲0,則直接返回
否則接着向前遍歷,什麼時候len不爲0或者已經遍歷完全部字符串之後再返回

代碼如下:

public class Solution {
    public int lengthOfLastWord(String s) {
		if(s.length()==0)
			return 0;
		int len=0;
		int i=s.length();
		while(len==0&&i>0){
			while(i>0){
				i--;
				if(s.charAt(i)==' ')
					break;
				len++;
			}
		}
		return len;
    }
}

重點是while塊。想的是如何能達到當未找到最後一個字符串向前找的目的。有兩限制條件。一個是len,最後一個字符串的長度,另一個關鍵的因素就是字符標號。對於兩個while塊來說,都需要這個限制條件。

看各路大神的代碼。

1.代碼如下:

	int lengthOfLastWord(char* s) {
		int len = 0;
		while (*s) {
			if (*s++ != ' ')
				++len;
			else if (*s && *s != ' ')
				len = 0;

		}
		return len;
	}
這個的思路和我是正好相反的。我是從後向前找,他是從前向後找。

先判斷當前是否爲空格,無論是否爲空格,當前指針都會指向下一個字符。如果當前指針不是空格的話,則len++。否則到下一個循環的時候,如果不是空格則開始重新計數,否則一直等待。如果在字符串結束之前都未預見空格以外的字符,則返回當前的長度。不再需要我之前的兩層while循環塊。

2.代碼如下:

        int len = 0, tail = s.length() - 1;
        while (tail >= 0 && s[tail] == ' ') tail--;
        while (tail >= 0 && s[tail] != ' ') {
            len++;
            tail--;
        }
        return len;

其實這個方法很簡單。先找到第一個非空字符,之後開始計數,直到遇見空格。之前的方法中其實都是在一個思維盲區中,只是關注空格,其實只要先找到第一個不是空格的字符開始計數就好,並不是很複雜的問題。是自己一開始把問題複雜化了。

3.這個java方法絕對可以,及其的佩服。

public int lengthOfLastWord(String s) {
    return s.trim().length()-s.trim().lastIndexOf(" ")-1;
}
就是先去掉字符串的首尾空格,減去最後出現空格的序號,因爲序號是從0開始計數的,結果所要的爲長度,所以還需要再減去1,最後得出答案。

發佈了36 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章