8、反转字符串

Example

Given "abcdefg".

offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"

第一种方法:

新建一个数组,将字符串按照格式要求一次放进去即可 但是这个方法消耗的额外的空间比较大

public class eight {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n =13;
        char[] ch = {'a','b','c','d','e','f','g'};
        System.out.println(RotateString(3,ch));

    }
    public static  char[] RotateString(int n,char[] str)
    {
        
        int len = str.length;
        char[] ch = new char[len];
        int i = 0;
        n %= len;
        for(int j = len-n;j<len;j++)
        {
            System.out.println(str[j]);
            ch[i]= str[j];
            i++;
        }
        for(int  j =0;j<len-n;j++)
        {
            ch[i]= str[j];
            i++;
        }
        return ch;
    }

}

第二种方法 

三次反转法

public static  char[] RotateString(int offset,char[] str)
    {
        int len = str.length;
        offset %=len;
        reverse(str,0,len-offset-1);//第一次将要放到数组最前面的反转
        reverse(str,len-offset,len-1);//第二次将剩余的反转
        reverse(str,0,len-1);//将整个数组反转  其实这一步的反转放到最前面作为第一次反转也是一样的
        return str;
    }
    public static void reverse(char[] str, int start,int end)
    {
        int i  = start;
        int j = end;
        for (;i<j;i++,j--)
        {
            char tmp = str[i];
            str[i] = str[j];
            str[j] = tmp;
        }
    }
    

猜你喜欢

转载自blog.csdn.net/Sml_banzhuiyixi/article/details/82840546
今日推荐