左旋转字符串

问题描述

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

思路分析

我的想法是构造两个字符数组,一个用来保存要移位的字符集,另一个是不移位的字符,最后将其按照顺序保存在一个新的字符数组中即可

码上有戏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public String LeftRotateString(String str,int n) {
if(str==null||str.equals("")||n>str.length())
return "";
if(n==0)
return str;
char[] s1=new char[n];
char[] s2=new char[str.length()-n];
char[] s3=str.toCharArray();
for(int i=0;i<str.length();i++){
if(i>=0&&i<n)
s1[i]=s3[i];
else
s2[i-n]=s3[i];
}
StringBuffer sb=new StringBuffer(str.length());
for(int i=0;i<s2.length;i++)
sb.append(s2[i]);
for(int i=0;i<s1.length;i++)
sb.append(s1[i]);
return sb.toString();
}

热评文章