公衆號:愛寫bug(ID:icodebugs)java
給定一個字符串,你須要反轉字符串中每一個單詞的字符順序,同時仍保留空格和單詞的初始順序。python
Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.數組
示例 1:bash
輸入: "Let's take LeetCode contest"
輸出: "s'teL ekat edoCteeL tsetnoc"
複製代碼
**注意:**在字符串中,每一個單詞由單個空格分隔,而且字符串中不會有任何額外的空格。函數
Note: In the string, each word is separated by single space and there will not be any extra space in the string.spa
每次遇到空格字符,就把 從上一次空格字符開始到該空格字符止之間的全部字符反轉一下便可,只須要注意最後一個字符結束時,並非空格字符,要再加一個判斷是不是已經索引到最後一位。debug
'abc def' 原字符串
['a' , 'b' , 'c' , ' ' , 'd' , 'e' ,'f'] 轉成char[]型數組
['c' , 'b' , 'a' , ' '...] 遍歷數組,遇到第一個空格,把該空格到上個空格之間的字母反轉
[... ' ' , 'd' , 'e' ,'f'] 遍歷到最後一位,不是空格,依然要反轉到前一個空格間的字母
[... ' ' , 'f' , 'd' ,'e'] 反轉
'cba fde' 轉成字符串輸出
複製代碼
class Solution {
public String reverseWords(String s) {
int sLen = s.length(), k = 0, j = 0;//j記錄空格字符前的索引位置
char strs[] = s.toCharArray(), temp;//轉爲字符數組
for (int i = 0; i < sLen; i++) {
if (strs[i] == ' ') j = i - 1;//遇到空格字符j值減1,爲截取的字母段的最後一個字母的索引
else if (i == sLen - 1) j = i;//若是到最後一位,則j值不該該再減1
else continue;
for (; j >= k; j--, k++) {//交換位置
temp = strs[j];
strs[j] = strs[k];
strs[k] = temp;
}
k = i + 1;//k記錄空格字符後的索引位置
}
return String.valueOf(strs);
}
}
複製代碼
python再也不復現上述定義指針解題的思路,這裏再次投機取巧,利用 python 切片特性及 split()
、join()
函數解題,解題思路:指針
'abc def gh' 原字符串
'hg fed cba' 切片特性反轉字符串
['hg' , 'fed' , 'cba'] split()分割字符串
['cba' , 'fed' , 'hg'] 切片反轉數組
'cba fed hg' 拼接成字符串
複製代碼
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(s[::-1].split()[::-1])
複製代碼