题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串“abcdefg”和数字2,改函数将返回左旋转2位得到的结果为“cdefgab”.
分析:只需要将字符串进行三次翻转即可,第一次将字符串完全翻转,第二次将第一步得到的结果前length-k个字符串翻转,第三次将第二步得到的结果的后k个字符翻转。
代码如下:
/**
* 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。
* 比如输入字符串“abcdefg”和数字2,改函数将返回左旋转2位得到的结果为“cdefgab”.
*/
package problem2;
/**
* @author Hutongling
*
* @time:2017年3月30日 下午2:26:05
*/
public class 左旋转字符串 {
//分析:只需要将字符串进行三次翻转即可,第一次将字符串完全翻转,
//第二次将第一步得到的结果前length-k个字符串翻转,第三次将第二步得到的结果的后k个字符翻转
static char[] leftInverseString(String string,int k){
if(string==null|| k>string.length() ||k<0)
return null;
char[] result=string.toCharArray();
char temp;
for(int i=0,j=string.length()-1;i<j;i++)//整体翻转字符串
{
temp=result[i];
result[i]=result[j];
result[j]=temp;
j--;
}
for(int i=0,j=string.length()-k-1;i<j;i++)//翻转前半部分
{
temp=result[i];
result[i]=result[j];
result[j]=temp;
j--;
}
for(int i=string.length()-k,j=string.length()-1;i<j;i++)//翻转后半部分
{
temp=result[i];
result[i]=result[j];
result[j]=temp;
j--;
}
return result;
}
public static void main(String[] args) {
String string="abcdefghijklmn";
System.out.println("原始字符串为:" + string);
char[] result=leftInverseString(string,5);
System.out.print("左翻转5个字符之后的结果为:" );
System.out.print(result);
}
}
代码结果:
原始字符串为:abcdefghijklmn
左翻转5个字符之后的结果为:fghijklmnabcde