方法 1:簡單的解法 [Accepted] 第一種方法非常簡單,我們將輸入字符串中按照空白字符串分開,然後把所有單詞放到一個字符串列表中,然後我們逐一遍歷每一個字符串並把反轉結果連接起來。最後,我們將刪除了額外空白字符的字符串返回。
Java
public class Solution {
public String reverseWords(String s) {
String words[] = s.split(" ");
StringBuilder res=new StringBuilder();
for (String word: words)
res.append(new StringBuffer(word).reverse().toString() + " ");
return res.toString().trim();
}
}
時間複雜度
時間複雜度: O(n)O(n) 。其中nn 是字符串的長度。
空間複雜度: O(n)O(n) 。使用了大小爲 nn 的 resres 。
方法 2:不使用自帶的 split 和 reverse 函數 [Accepted] 算法
我們可以自己寫一個 split 和 reverse 函數。 split 函數將字符串按照 " " (空格)爲分隔符將字符串分開並返回單詞列表。 reverse 函數返回每個字符串反轉後的字符串。
Java
public class Solution {
public String reverseWords(String s) {
String words[] = split(s);
StringBuilder res=new StringBuilder();
for (String word: words)
res.append(reverse(word) + " ");
return res.toString().trim();
}
public String[] split(String s) {
ArrayList < String > words = new ArrayList < > ();
StringBuilder word = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
words.add(word.toString());
word = new StringBuilder();
} else
word.append( s.charAt(i));
}
words.add(word.toString());
return words.toArray(new String[words.size()]);
}
public String reverse(String s) {
StringBuilder res=new StringBuilder();
for (int i = 0; i < s.length(); i++)
res.insert(0,s.charAt(i));
return res.toString();
}
}
時間複雜度
時間複雜度: O(n)O(n) 。其中 nn 是字符串的長度。 空間複雜度: O(n)O(n) 。使用了大小爲 nn 的 resres 。 方法 3:使用 StringBuilder 和 reverse 方法 [Accepted] 算法
這一方法中,我們不使用 split 方法,我們創建臨時字符串 wordword 保存單詞,我們在遍歷過程中將字符逐一連接在 wordword 後面,直到我們遇到 ’ '(空格) 字符。當我們遇到 ’ ’ 字符時,我們將 wordword 反轉後連接在結果字符串 resultresult 後面。在遍歷完成以後,我們返回結果字符串 resultresult 。
Java
public class Solution {
public String reverseWords(String input) {
final StringBuilder result = new StringBuilder();
final StringBuilder word = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) != ' ') {
word.append(input.charAt(i));
} else {
result.append(word.reverse());
result.append(" ");
word.setLength(0);
}
}
result.append(word.reverse());
return result.toString();
}
}
複雜度分析
時間複雜度: O(n)O(n) 。單遍循環的上限是 nn ,其中 nn 是字符串的長度。 空間複雜度: O(n)O(n) 。 resultresult 和 wordword 最多爲 nn 。
最近面試被懟了?缺面試題刷提升自己嗎?
點擊:Android 學習,面試文檔,視頻收集大整理
來獲取學習資料+面試題視頻解析提升自己去挑戰一下BAT面試難關吧
方法 1:簡單的解法 [Accepted] 第一種方法非常簡單,我們將輸入字符串中按照空白字符串分開,然後把所有單詞放到一個字符串列表中,然後我們逐一遍歷每一個字符串並把反轉結果連接起來。最後,我們將刪除了額外空白字符的字符串返回。
Java
public class Solution {
public String reverseWords(String s) {
String words[] = s.split(" ");
StringBuilder res=new StringBuilder();
for (String word: words)
res.append(new StringBuffer(word).reverse().toString() + " ");
return res.toString().trim();
}
}
時間複雜度
時間複雜度: O(n)O(n) 。其中nn 是字符串的長度。
空間複雜度: O(n)O(n) 。使用了大小爲 nn 的 resres 。
方法 2:不使用自帶的 split 和 reverse 函數 [Accepted] 算法
我們可以自己寫一個 split 和 reverse 函數。 split 函數將字符串按照 " " (空格)爲分隔符將字符串分開並返回單詞列表。 reverse 函數返回每個字符串反轉後的字符串。
Java
public class Solution {
public String reverseWords(String s) {
String words[] = split(s);
StringBuilder res=new StringBuilder();
for (String word: words)
res.append(reverse(word) + " ");
return res.toString().trim();
}
public String[] split(String s) {
ArrayList < String > words = new ArrayList < > ();
StringBuilder word = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
words.add(word.toString());
word = new StringBuilder();
} else
word.append( s.charAt(i));
}
words.add(word.toString());
return words.toArray(new String[words.size()]);
}
public String reverse(String s) {
StringBuilder res=new StringBuilder();
for (int i = 0; i < s.length(); i++)
res.insert(0,s.charAt(i));
return res.toString();
}
}
時間複雜度
時間複雜度: O(n)O(n) 。其中 nn 是字符串的長度。 空間複雜度: O(n)O(n) 。使用了大小爲 nn 的 resres 。 方法 3:使用 StringBuilder 和 reverse 方法 [Accepted] 算法
這一方法中,我們不使用 split 方法,我們創建臨時字符串 wordword 保存單詞,我們在遍歷過程中將字符逐一連接在 wordword 後面,直到我們遇到 ’ '(空格) 字符。當我們遇到 ’ ’ 字符時,我們將 wordword 反轉後連接在結果字符串 resultresult 後面。在遍歷完成以後,我們返回結果字符串 resultresult 。
Java
public class Solution {
public String reverseWords(String input) {
final StringBuilder result = new StringBuilder();
final StringBuilder word = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) != ' ') {
word.append(input.charAt(i));
} else {
result.append(word.reverse());
result.append(" ");
word.setLength(0);
}
}
result.append(word.reverse());
return result.toString();
}
}
複雜度分析
時間複雜度: O(n)O(n) 。單遍循環的上限是 nn ,其中 nn 是字符串的長度。 空間複雜度: O(n)O(n) 。 resultresult 和 wordword 最多爲 nn 。
最近面試被懟了?缺面試題刷提升自己嗎?
點擊:[Android 學習,面試文檔,視頻收集大整理]添加鏈接描述(https://shimo.im/docs/vrvxvW8DY3RTDGGg/read)
來獲取學習資料+面試題視頻解析提升自己去挑戰一下BAT面試難關吧