1. 程式人生 > 其它 >力扣557(java)-反轉字串中的單詞(簡單)

力扣557(java)-反轉字串中的單詞(簡單)

題目:

給定一個字串 s ,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。

 示例 1:

輸入:s = "Let's take LeetCode contest"
輸出:"s'teL ekat edoCteeL tsetnoc"
示例 2:

輸入: s = "God Ding"
輸出:"doG gniD"
 

提示:

  • 1 <= s.length <= 5 * 104
  • s 包含可列印的 ASCII 字元。
  • s 不包含任何開頭或結尾空格。
  • s 裡 至少 有一個詞。
  • s 中的所有單詞都用一個空格隔開。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路:

1.先將字串轉換成字元陣列,然後遍歷字元陣列;

2.當遇到空格字元,則說明前一個單詞結束了,需要對空格前的單詞進行翻轉操作,定義一個初始索引start,結束索引為 i-1(因為此時i所指向的為空格,需要減1才是字母)

3.利用字元陣列reverse()函式進行翻轉操作,翻轉結束後,把初始索引start更新為 i+1 下一個單詞的首字母位置,然後繼續遍歷,直到遇到下一個空格或結尾;

4.遍歷到字元陣列結尾(i == n-1),最後一個單詞的結束索引為 n-1,然後利用函式進行翻轉;

5.最後用String的構造方法,將char陣列轉換成字串進行返回。

程式碼:

 1 class Solution {
2 public String reverseWords(String s) { 3 //把字串轉換為字串陣列 4 char[] array = s.toCharArray(); 5 //獲取字串陣列的長度 6 int n = array.length; 7 //定義一個頭指標 8 int start = 0; 9 for(int i= 0;i < n;i++){ 10 //遍歷字串陣列,遇到空格符代表一個單詞遍歷結束 11 if
(array[i] == ' '){ 12 reverse(array, start, i-1); 13 //首指標為下一個單詞首位置 14 start = i+1; 15 } 16 //遍歷到最後一個單詞 17 if(i == n-1){ 18 reverse(array, start, i); 19 } 20 } 21 return new String(array); 22 } 23 public void reverse(char[] array, int i, int j){ 24 while(i < j){ 25 char temp = array[j]; 26 array[j] = array[i]; 27 array[i] = temp; 28 i++; 29 j--; 30 } 31 } 32 }

小知識:

1.toCharArray() 方法將字串轉換為字元陣列

// 將字串s轉化成一個char型別的陣列,陣列名為s1
  char[] s1 = s.toCharArray(); 

2.將s1轉化成string字串: return new String(s1);