对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。
思路:
(1)借助于单词翻转的顺序地思路,把字符串的部分左移,可以把字符串看成两部分,要左移的n位分为一部分,剩下的分为一部分
1)先翻转第一部分
2)翻转第二部分
3)整体翻转
当字符串的场地小于等于要左旋的位数时,不需要旋转了;
public String LeftRotateString(String str,int n)
{
if(str == null || str.length()<2 ||str.length()<=n)
{
return str;
}
char[] charArray = str.toCharArray();
//翻转前n个
reverse(charArray,0,n-1);
//翻转后面的
reverse(charArray,n,charArray.length-1);
//整体翻转
reverse(charArray,0,charArray.length-1);
return String.valueOf(charArray);
}
private void reverse(char[] array,int start,int end)
{
char temp = ' ';
while(start < end)
{
temp = array[start];
array[start++] = array[end];
array[end--] = temp;
}
}