天天看點

541 反轉字元串II

字元串&簡單

給定一個字元串 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);//這裡注意
    }
}