[编程之美] 2.17 字符串循环移位

题目

将字符串向右循环移动 k 位

s = "abcd123" k = 3
Return "123abcd"

思路

方法一 翻转法

将子串 s[0:str.length() - k)] 翻转,子串s[str.length() - k,str.length()] 翻转。然后将整个字符翻转可以到最终结果。

eg:
将 abcd123 中的 abcd 和 123 单独翻转,得到 dcba321,然后对整个字符串进行翻转,得到 123abcd。

class Solution {
    public String reverseString(String str1) {
        char[] chs = str1.toCharArray();
        for(int i =0,j = str1.length()-1;i<j;i++,j--){
            char tmp = chs[i];
            chs[i] = chs[j];
            chs[j] = tmp;
        }
        return new String(chs);
    }
    public String turnright(String str,int k){
        String substr1 = reverseString(str.substring(0,str.length() - k));
        String substr2 = reverseString(str.substring(str.length() - k,str.length()));
        return reverseString(substr1+substr2);
    }
 }
public class Main {
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.turnright("abcd123",3));
    }
}

方法二 扩展法

生成新 ss = s+s,取ss[str.length() - k:str.length() - k + str.length()]

class Solution {
    public String turnright(String str,int k){
        String ss = str+str;
        return ss.substring(str.length()-k,str.length()-k+str.length());
    }
 }
public class Main {
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.turnright("abcd123",3));
    }
}

猜你喜欢

转载自blog.csdn.net/u013383813/article/details/83104313
今日推荐