劍指offer 44 翻轉單詞序列

2022-03-29 10:38:10 字數 2071 閱讀 1710

44. 翻轉單詞序列

牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,「student. a am i」。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是「i am a student.」。cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?

用空格分割字串後用stringbuilder變數從後往前遍歷陣列拼接

注意點:要用trim() 方法去除前後導空格, 並且單詞之間可能有多個空格,所以必須使用正規表示式來分割,單純的使用空格分割後面新增的時候必須判斷是否是空串

1

class

solution 6//

用空格分割成陣列,空格可能有很多個,所以要用正規表示式

7 string splits = s.trim().split("[ ]+"); 8//

使用stringbilder進行拼接

9 stringbuilder sb = new stringbuilder("");

10for(int i = splits.length - 1; i >= 0; i--)15}

16return

sb.tostring();17}

18 }

leetcode 執行時間為8 ms - 16.63%, 空間為39.3 mb - 14.95%

時間複雜度:split()函式的時間複雜度為o(n), 一次遍歷陣列的時間複雜度為o(n), 所以總的時間複雜度為o(n)

空間複雜度:需要乙個額外的陣列來存放單詞,所以空間複雜度為o(n),倒序可以使用棧來實現,不過那樣會增加乙個o(n)的空間複雜度

1

class

solution 6//

用空格分割成陣列,空格可能有很多個,所以要用正規表示式

7 string splits = s.trim().split(" "); 8//

使用stringbilder進行拼接

9 stringbuilder sb = new stringbuilder("");

10for(int i = splits.length - 1; i >= 0; i--)

1415

if(i > 0)18}

19return

sb.tostring();20}

21 }

leetcode 執行用時:1 ms - 100.00%, 空間為 38.9 mb - 57.82%,可以看到,執行時間短了很多

時間複雜度:split()函式的時間複雜度為o(n), 一次遍歷陣列的時間複雜度為o(n), 所以總的時間複雜度為o(n)

空間複雜度:需要乙個額外的陣列來存放單詞,所以空間複雜度為o(n),倒序可以使用棧來實現,不過那樣會增加乙個o(n)的空間複雜度

不使用split()函式,從後往前倒著遍歷,獲取到單詞就新增到結果字串中

1

class

solution

6 s =s.trim();7//

兩個指標,i 和 j, 初始時都在末尾

8int i = s.length() - 1, j =i;

9 stringbuilder sb = new stringbuilder("");

10while(i >= 0)

15//

擷取[i+1, j+1)的子串到sb

1718

//跳過單詞間多餘的空格

19while(i >= 0 && s.charat(i) == ' ')

22 j =i;23}

24return

sb.tostring().trim();25}

26 }

leetcode 執行用時:3 ms - 65.01%, 空間為:39.2 mb - 16.37%

時間複雜度:遍歷了一遍字串,所以時間複雜度為o(n)

空間複雜度:o(1)

思路二和思路三均參考自:

劍指offer 44翻轉單詞順序列

題目描述 牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a stu...

劍指offer(44)翻轉單詞順序列

問題描述 牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a stu...

劍指offer44 翻轉單詞順序列

題目描述 牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a stu...