力扣557(java)-反轉字串中的單詞(簡單)
阿新 • • 發佈:2022-05-08
題目:
給定一個字串 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);