左旋转字符串-java

2017-07-19  本文已影响0人  Jacinth

左旋转字符串

题目描述

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

public class Solution {
    /*解题思路:
    reverse
    (ArBr)r =((B)r)r((A)r)r=BA 
    假设原序列有n位,循环左移i位的过程如下: 
    (1)reverse(0,i-1); 
    (2)reverse(i,n-1); 
    (3)reverse(1,n-1); 
    例如原序列:abcdefg,循环左移3位: 
    (1)cba   defg 
    (2)cba   gfed
    (3)defgabc
    要记住一点就是STL中的迭代器是左闭右开区间,所以reverse操作的第二个参数需要往后移动一位*/
    //首先将要移动的部分看做第一部分,剩余部分为第二部分
    //各自对第一部分,第二部分做翻转操作
    //最后再对整体做翻转操作
    public String LeftRotateString(String str,int n) {
        if(str == null || str.length() ==0 || n <= 0){
            return str;//返回原字符串
        }
        //将第一、第二部分的下标赋初值
        int startIndex1 = 0;
        int endindex1 = startIndex1 + n - 1;
        int startIndex2 = endindex1 + 1;
        int endIndex2 = str.length() - 1;
         
        //翻转第一部分
        String firstReverse = Reverse(str,startIndex1,endindex1);
        //翻转第二部分
        String secondReverse =Reverse(firstReverse,startIndex2,endIndex2);
        //翻转整体
        return Reverse(secondReverse,startIndex1,endIndex2);
    }
     
    private String Reverse(String oriStr,int start,int end){
        char [] array = oriStr.toCharArray();
         
        while(start < end){
            char temp = array[start];
            array[start] = array[end];
            array[end] = temp;
             
            ++start;
            -- end;
        }
        return new String(array);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读