【演算法】LeetCode演算法題-Length Of Last Word
阿新 • • 發佈:2018-11-12
這是悅樂書的第155次更新,第157篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第14題(順位題號是58)。給定一個字串,包含戴爾字母、小寫字母和空格,返回最後一個單詞的長度,如果最後一個單詞不存在則返回0。另外,單詞不包含空格。例如:
輸入: “Hello World”
輸出: 5
說明:最後一個單詞為world,其長度為5
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 第一種解法
第一步考慮特殊情況,傳入的字串全部由空格組成,這時可以直接返回0。
第二步,獲取最後一個單詞結束字元的位置。
既然是獲取最後一個單詞,那麼最後一個單詞的情況分兩種:以單詞結尾;不已單詞結尾,後面還帶了空格。
先將字串轉為字元陣列,從後往前依次獲取每一個字元,如果遇到空格,繼續向前迴圈,直到第一個字元;反之則表示遇到了一個單詞,將其位置記錄為end。
第三步,獲取最後一個單詞開始字元的位置。接著第二步的索引繼續向前判斷,不過判斷的條件變成了不等於空格,直到條件不滿足,則表示此單詞已經查詢完畢,將其位置記錄為start。
第三步,用end減去start,即為最後一個單詞的長度。
public int lengthOfLastWord(String s) { if("".equals(s.trim())) { return 0; } int n = s.length()-1; char[] ch = s.toCharArray(); while (n >= 0 && ch[n] == ' ') { n--; } int end = n; while(n >= 0 && ch[n] != ' ') { n--; } int start = n; return end - start; }
03 第二種解法
既然此字串是由大小寫字母和空格組成,那麼是否可以使用空字串將其分割為多個子字串?如果原字串不包含空格,那麼分割後還是該字串;如果包含字串,那麼最後一個被分割出來的子字串就是我們想要的最後的一個單詞。和第一種解法最開始一樣,特殊情況也是要考慮進去的。
public int lengthOfLastWord2(String s) { if("".equals(s.trim())) { return 0; } if (s.length() ==0 || s.indexOf(" ") == -1) { return s.length(); } String[] arr = s.split(" "); return arr[arr.length-1].length(); }
04 第三種解法
將原字串首尾的空格去掉,然後找到最後一次出現空格的位置,兩者相減再減1即為最後單詞的長度。
public int lengthOfLastWord3(String s) {
return s.trim().length()-s.trim().lastIndexOf(" ")-1;
}
05 小結
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!