前言
之前小六六一直覺得自己的算法比較菜,算是一個短闆吧,以前刷題也還真是三天打魚,兩天曬網,刷幾天,然後就慢慢的不堅持了,是以這次,借助平台的活動,打算慢慢的開始開刷,并且自己還會給刷的題總結下,談談自己的一些思考,和自己的思路等等,希望對小夥伴能有所幫助吧,也可以借此機會把自己短闆補一補,希望自己能堅持下去呀
連結清單的合集
- 六六力扣刷題哈希表之哈希理論
- 六六力扣刷題哈希表之有效的字母異位詞
- 六六力扣刷題哈希表之兩個數組的交集
- 六六力扣刷題哈希表之快樂數
- 六六力扣刷題哈希表之贖金信
- 六六力扣刷題哈希表之三數之和
字元串
- 六六力扣刷題字元串之反轉字元串
題目
給定一個字元串 s 和一個整數 k,從字元串開頭算起,每計數至 2k 個字元,就反轉這 2k 字元中的前 k 個字元。
如果剩餘字元少于 k 個,則将剩餘字元全部反轉。
如果剩餘字元小于 2k 但大于或等于 k 個,則反轉前 k 個字元,其餘字元保持原樣。
示例 1:
輸入:s = "abcdefg", k = 2
輸出:"bacdfeg"
示例 2:
輸入:s = "abcd", k = 2
輸出:"bacd"
題解
這道題目其實也是模拟,實作題目中規定的反轉規則就可以了。
一些同學可能為了處理邏輯:每隔2k個字元的前k的字元,寫了一堆邏輯代碼或者再搞一個計數器,來統計2k,再統計前k個字元。
其實在周遊字元串的過程中,隻要讓 i += (2 * k),i 每次移動 2 * k 就可以了,然後判斷是否需要有反轉的區間。
代碼
class Solution {
public String reverseStr(String s, int k) {
int n = s.length();
char[] arr = s.toCharArray();
for (int i = 0; i < n; i += 2 * k) {
reverse(arr, i, Math.min(i + k, n) - 1);
}
return new String(arr);
}
public void reverse(char[] arr, int left, int right) {
while (left < right) {
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;