反轉字符串中的單詞III詳解

方法 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面試難關吧
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章