劍指 Offer 58 - I. 翻轉(zhuǎn)單詞順序
解法一
不用內(nèi)置方法文章來源:http://www.zghlxwxcb.cn/news/detail-669905.html
- 去除首尾空格和中間多余空格
- 翻轉(zhuǎn)所有字符
- 翻轉(zhuǎn)每個單詞
class Solution {
public String reverseWords(String s) {
// 去除首尾空格和中間多余空格
char[] ch = trim(s);
// 翻轉(zhuǎn)所有字符
reverse(ch, 0, ch.length - 1);
// 翻轉(zhuǎn)每個單詞
reverseWord(ch);
return new String(ch);
}
char[] trim(String s){
StringBuilder sb = new StringBuilder();
int l = 0, r = s.length() - 1;
while(l <= r && s.charAt(l) == ' ') l++;
while(l <= r && s.charAt(r) == ' ') r--;
for(int i = l; i <= r; i++){
if(s.charAt(i) != ' ') sb.append(s.charAt(i));
else {
if(s.charAt(i + 1) != ' ') sb.append(' '); // 只加入連續(xù)空格的最后一個
}
}
return sb.toString().toCharArray();
}
void reverseWord(char[] ch){
int l = 0, r = 0;
while(r < ch.length){
while(r < ch.length && ch[r] != ' ') r++;
reverse(ch, l, r - 1);
l = r + 1;
r = r + 1;
}
}
void reverse(char[] ch, int l, int r){
while(l < r){
char tmp = ch[l];
ch[l] = ch[r];
ch[r] = tmp;
l++;
r--;
}
}
}
解法二
用自帶的 trim()
和 substring()
,要自己實現(xiàn)這兩個方法也很簡單。文章來源地址http://www.zghlxwxcb.cn/news/detail-669905.html
class Solution {
public String reverseWords(String s) {
s = s.trim(); // 刪除首尾空格
int j = s.length() - 1, i = j;
StringBuilder res = new StringBuilder();
while(i >= 0){
while(i >= 0 && s.charAt(i) != ' ') i--; // 搜索首個空格
res.append(s.substring(i + 1, j + 1) + " "); // 添加單詞
while(i >= 0 && s.charAt(i) == ' ') i--; // 跳過單詞間空格
j = i; // j 指向下個單詞的尾字符
}
return res.toString().trim(); // 轉(zhuǎn)化為字符串并返回
}
}
到了這里,關(guān)于劍指 Offer 58 - I. 翻轉(zhuǎn)單詞順序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!