美文网首页
左旋转字符串-java

左旋转字符串-java

作者: Jacinth | 来源:发表于2017-07-19 00:20 被阅读0次

    左旋转字符串

    题目描述

    汇编语言中有一种移位指令叫做循环左移(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);
        }
    }
    

    相关文章

      网友评论

          本文标题:左旋转字符串-java

          本文链接:https://www.haomeiwen.com/subject/dmykkxtx.html