大家好我是蘇麟 , 今天帶來字符串相關的題目 .
大綱
- 反轉問題
- 字符串反轉
- K個一組反轉
- 僅僅反轉字母
- 反轉字符串中的單詞
反轉問題
字符串反轉
描述 :
編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 s的形式給出。
題目 :
LeetCode 344. 反轉字符串 :
字符串反轉
分析 :
這道題還是很簡單的 , 只要把最前邊和最后的元素調換就行了 , 用兩個變量記錄第一個元素下標 和 最后一個變量下標 , 操作變量來完成反轉 .
解析 :
class Solution {public void reverseString(char[] s) {if(s.length == 0 ||s == null){return;}int left = 0;int right = s.length - 1;for(int i = 0 ;i < s.length / 2;i++){char temp = s[left];s[left] = s[right];s[right] = temp;left++;right--;}}
}
K個一組反轉
描述 :
給定一個字符串 s 和一個整數 k,從字符串開頭算起,每計數至 2k 個字符,就反轉這 2k 字符中的前 k 個字符。
題目 :
LeetCode 541. 反轉字符串 II :
f反轉字符串
分析 :
我們直接按題意進行模擬就可以: 反轉每個下標從 2k的倍數開始的,長度為 k的子串。若該子串長度不足k,則反轉整個子串。
解析 :
class Solution {public String reverseStr(String s, int k) {char[] arr = s.toCharArray();int length = s.length();for(int i = 0;i < length;i+= 2 *k){exchangeArr(arr,i,Math.min(i + k,length) -1 );}return new String(arr);}public void exchangeArr(char[] arr, int left , int right){while(left < right){char a = arr[left];arr[left] = arr[right];arr[right] = a;left++;right--;}}
}
僅僅反轉字母
描述 :
給你一個字符串 s ,根據下述規則反轉字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小寫或大寫)位置反轉。
返回反轉后的 s 。
題目 :
LeetCode 917. 僅僅反轉字母 :
僅僅反轉字母
分析 :
將 s 中的所有字母單獨存入棧中,所以出棧等價于對字母反序操作然后,遍歷 s 的所有字符,如果是字母我們就選擇棧頂元素輸出。
解析 :
class Solution {public String reverseOnlyLetters(String s) {Stack<Character> stack = new Stack<>();for(char temp : s.toCharArray()){if(Character.isLetter(temp)){stack.push(temp);}}StringBuilder ans = new StringBuilder();for(char temp : s.toCharArray()){if(Character.isLetter(temp)){ans.append(stack.pop());}else{ans.append(temp);}}return ans.toString();}
}
反轉字符串中的單詞
描述 :
給你一個字符串 s ,請你反轉字符串中 單詞 的順序。
單詞 是由非空格字符組成的字符串。s 中使用至少一個空格將字符串中的 單詞 分隔開。
返回 單詞 順序顛倒且 單詞 之間用單個空格連接的結果字符串
題目 :
LeetCode 151. 反轉字符串中的單詞 :
反轉字符串中的單詞
分析 :
我們可以借助 spilt 函數來分割單詞 , 再用 可變字符串 添加單詞 .
解析 :
class Solution {public String reverseWords(String s) {String[] s1 = s.split(" ");StringBuilder ans = new StringBuilder();for (int i= s1.length - 1; i >= 0 ;i--){if(s1[i] != ""){ans.append(s1[i]).append(" ");}}return ans.toString().trim(); }
}
這期就到這里 , 下期見!