每日演算法----最後一個單詞的長度----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 題目來源
要自主學習!------swrici
相關文章
- 每日一道演算法:最後一個單詞的長度演算法
- 字串最後一個單詞的長度字串
- LeetCode每日一題: 最後一個單詞的長度(No.58)LeetCode每日一題
- 讓我們一起啃演算法----最後一個單詞的長度演算法
- Leetcode 58. 最後一個單詞的長度LeetCode
- leetcode_58_最後一個單詞的長度_簡單LeetCode
- 【leetcode 簡單】第十四題 最後一個單詞的長度LeetCode
- 基礎程式設計題(PTA) 7-26 單詞長度 (15分)程式設計
- 【每日一題】力扣1046.最後一塊石頭的重量每日一題力扣
- 結構體最後的零長度陣列結構體陣列
- js查詢包含字元最多的單詞的字元長度JS字元
- 每日一練(45):長度最小的子陣列陣列
- 每日一詞-remainREMAI
- 統計一個字串中的單詞的個數,並列印各個單詞字串
- 【每日一題】無重複字元的最長子串每日一題字元
- VI 跳到最後一行和跳到最後一行的最後一個字元字元
- go每日新聞--2020-10-15Go
- 每日一詞 sidetrackIDE
- 經典演算法題每日演練——最長公共子序列演算法
- elasticsearch演算法之詞項相似度演算法(一)Elasticsearch演算法
- VI操作--跳到最後一行和跳到最後一行的最後一個字元字元
- LeetCode每日一題:最長公共字首(No.14)LeetCode每日一題
- 每日一詞 47 l equivalentUI
- 每日一詞 35 | appealAPP
- 每日leetcode——最長公共字首LeetCode
- 產生10個長度不超過10的字串字串
- 一個簡單的英漢詞典小程式
- 修改一個列表中的一個單詞小技巧筆記筆記
- LeetCode每日一題:反轉字串中的單詞 III(No.557)LeetCode每日一題字串
- script取一個月的最後一天
- 一個最簡單的 Github workflow 例子Github
- 一個最簡單的計算器
- 一個最簡單的web componentsWeb
- 10:單詞排序排序
- 每日一道 LeetCode (48):最長迴文子串LeetCode
- golang 計算最長不重複字串長度Golang字串
- 最簡單的一個powershell的指令碼指令碼
- Oracle 10g 手工建立一個最簡單的資料庫Oracle 10g資料庫