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