剑指offer——左旋转字符串

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

 

解题思路:

abc——>cba

XYZdef——>fedZYX

abcXYZdef——>cbafedZYX

cbafedZYX——>XYZdefabc

 

 1 public class Solution {
 2     public String LeftRotateString(String str,int n) {
 3         char[] chars = str.toCharArray();        
 4         if(chars.length < n) return "";
 5         reverse(chars, 0, n-1);
 6         reverse(chars, n, chars.length-1);
 7         reverse(chars, 0, chars.length-1);
 8         StringBuilder sb = new StringBuilder(chars.length);
 9         for(char c:chars){
10             sb.append(c);
11         }
12         return sb.toString();
13     }
14      
15     public void reverse(char[] chars,int low,int high){
16         char temp;
17         while(low<high){
18             temp = chars[low];
19             chars[low] = chars[high];
20             chars[high] = temp;
21             low++;
22             high--;
23         }
24     }
25 }

 

posted @ 2019-05-16 21:06  王爷爱吃秋刀鱼  阅读(176)  评论(0编辑  收藏  举报