剑指offer-左旋转字符串

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
 
方法一:直接截断拷贝
 1 public String LeftRotateString(String str,int n) {//my
 2         StringBuffer sb = new StringBuffer(n);
 3         if(str==null||str.length()==0){
 4             return sb.toString();
 5         }
 6         n = n%str.length();
 7         sb.append(str.substring(n,str.length()));
 8         sb.append(str.substring(0,n));
 9         return sb.toString();
10     }

方法二:进行三次翻转,abcXYZdef,3,先翻转0-3得到cbaXYZdef,再反转3-str.length得到cbafedZYX,最后整体翻转得到XYZdefabc

 1 public class Solution {//mytip
 2     public String LeftRotateString(String str,int n) {
 3         char[] c = str.toCharArray();
 4         if(str==null||str.length()==0){
 5             return str;
 6         }
 7         n = n%str.length();
 8         for(int i =0,j=n-1;i<j;i++,j--){
 9             sw(c,i,j);
10         }
11         for(int i =n,j=str.length()-1;i<j;i++,j--){
12             sw(c,i,j);
13         }
14         for(int i =0,j=str.length()-1;i<j;i++,j--){
15             sw(c,i,j);
16         }
17         return String.valueOf(c);
18     }
19     public void sw(char[] c,int i,int j){
20         char temp = c[i];
21         c[i]=c[j];
22         c[j]=temp;
23     }
24 }

 

posted @ 2019-04-15 13:35  月半榨菜  阅读(104)  评论(0编辑  收藏  举报