剑指Offer(42_2)-左旋字符串&右旋字符串

题目

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

思路:

左旋和右旋实际上是一样的。我们实际上可以采用翻转字符串来解决。左旋和右旋,实际上是把字符串分为两部分,前半部分放到后面,后半部分放到前面-》这个直接使用一个全局翻转就可以得到,然后在看两部分,我们会发现两个子串在其范围内是反的,那么分别在来一次翻转就可以得到我们想要的结果。

代码实现:

public class Solution {
    private void swap(char[] ch,int a,int b){
        char tmp=ch[a];
        ch[a]=ch[b];
        ch[b]=tmp;
    }
    private void reverse(char[] ch,int l,int r){
        while(l<r){
            swap(ch,l++,r--);
        }
    }
    public String LeftRotateString(String str,int n) {
        if(str==null||str.length()==0)
            return "";
        if(n>str.length()){
            n=n%str.length();
        }
        char ch[]=str.toCharArray();
        reverse(ch,0,str.length()-1);
        reverse(ch,0,n-1);
        reverse(ch,n,str.length()-1);
        return new String(ch);
    }
}

你可能感兴趣的:(剑指Offer(42_2)-左旋字符串&右旋字符串)