字元串&簡單
給定一個字元串 s 和一個整數 k,你需要對從字元串開頭算起的每隔 2k 個字元的前 k 個字元進行反轉。
如果剩餘字元少于 k 個,則将剩餘字元全部反轉。
如果剩餘字元小于 2k 但大于或等于 k 個,則反轉前 k 個字元,其餘字元保持原樣。
示例:
輸入: s = “abcdefg”, k = 2
輸出: “bacdfeg”
提示:
該字元串隻包含小寫英文字母。
給定字元串的長度和 k 在 [1, 10000] 範圍内。
方法一:
class Solution {
public String reverseStr(String s, int k) {
int n=s.length();
String ans="";
String res="";
for(int i=0;i<n;i=i+2*k){
int j=i;
while(j<=i+2*k-1 && j<n){
if(j%(2*k)>k-1) res=res+s.charAt(j);
else res=s.charAt(j)+res;
j++;
}
ans=ans+res;
res="";
}
return ans;
}
}
方法二:對于字元串,不能直接修改,可以使用toCharArray變成char數組,最後使用String.valueOf,或者是new String(),變回字元串。
class Solution {
public String reverseStr(String s, int k) {
int i=0;
char[] ch=s.toCharArray();//注意這裡
while(i<s.length()){
if(i+k-1<ch.length){
for(int j=0;j<k/2;j++){//注意這裡for循環,j從0 到 總個數/2
ch[i+j]^=ch[i+k-1-j];
ch[i+k-1-j]^=ch[i+j];
ch[i+j]^=ch[i+k-1-j];
}
}
else
for(int j=0;j<(ch.length-i)/2;j++){//注意這裡for循環
ch[i+j]^=ch[ch.length-1-j];
ch[ch.length-1-j]^=ch[i+j];
ch[i+j]^=ch[ch.length-1-j];
}
i+=k*2;
}
return new String(ch);//這裡char數組直接變成String
}
}
方法三:
class Solution {
public String reverseStr(String s, int k) {
int len = s.length(), p = 0;
char[] chars = s.toCharArray();
while (p < len) {
int left = p, right = p + k-1;
right = right < len ? right : len - 1;
while (left < right) {
char tmp = chars[left];
chars[left] = chars[right];
chars[right] = tmp;
left++;
right--;
}
p += 2 * k;
}
return String.valueOf(chars);//這裡注意
}
}