leetcode 151. 翻转字符串里的单词
生活随笔
收集整理的這篇文章主要介紹了
leetcode 151. 翻转字符串里的单词
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
難度:中等
頻次:69
題目:
給你一個字符串 s ,逐個翻轉字符串中的所有 單詞 。
單詞 是由非空格字符組成的字符串。s 中使用至少一個空格將字符串中的 單詞 分隔開。
請你返回一個翻轉 s 中單詞順序并用單個空格相連的字符串。
說明:
輸入字符串 s 可以在前面、后面或者單詞間包含多余的空格。
翻轉后單詞間應當僅用一個空格分隔。
翻轉后的字符串中不應包含額外的空格。
解題思路:一次遍歷(倒序+標記位置+截取)
注意
- 遍歷的時候分成兩種形式,第一種是遍歷跳過空格,直到非空格的位置,一種是遍歷非空格,直到是空格的位置
- 兩次遍歷的順序,最好是i先遍歷非空格,再遍歷空格,這樣子不用去考慮到開頭是否有空格的特俗情況,如果是先遍歷空格,再遍歷非空格,那么最后i=j的情況,而且這個時候不去處理就會多出一個空格
- String的函數需要注意
- s.charAt();
- s.substring(i,j);[i,j),包括i,不包括j
- s.toString();
- s.toCharArray();
代碼
先遍歷字母,再遍歷非空格
class Solution {public String reverseWords(String s) {int len=s.length();int i=len-1;StringBuffer sb=new StringBuffer();while(i>=0){int j=i;//i的下標移動到第一個空格處while(i>=0&&s.charAt(i)!=' ') i--;//如果結果集里有東西,添加空格if(sb.length()>0) sb.append(" ");//裁剪[i+1,j]sb.append(s.substring(i+1,j+1));//移動i到后面不為空格處while(i>=0&&s.charAt(i)==' ') i--;}return sb.toString();} }先遍歷空格,再遍歷字母
class Solution {public String reverseWords(String s) {int len=s.length();int i=len-1;StringBuffer sb=new StringBuffer();while(i>=0){//i的下標移動到第一個非空格處while(i>=0&&s.charAt(i)==' ') i--;int j=i;//把i移動到空格處while(i>=0&&s.charAt(i)!=' ') i--;//如果結果集里有東西并且最后遍歷i!=j,添加空格if(sb.length()>0&&i!=j) sb.append(" ");//裁剪[i+1,j]sb.append(s.substring(i+1,j+1));}return sb.toString();} }總結
以上是生活随笔為你收集整理的leetcode 151. 翻转字符串里的单词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 2. 两数相加
- 下一篇: leetcode 113. 路径总和 I