首先介绍什么是旋转字符串,解释如下:
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
了解了定义后,我们要如何旋转字符串呢?这里我会介绍旋转前k个字符的字符串的方法。
1、三段旋转法。(比如旋转前2个字符,就把字符串分割为前两个为一段,剩下的为另一端,分别旋转每串字符,最后再整体旋转。
即abcd ——>ab cd——>ba dc——>badc——>cdab)
2、前移法(len是旋转的次数)
3、拼接法:
4.空间换时间法:void rotate(int* nums, int numsSize, int k)
{
k%=numsSize;
//定义一个变长数组,用来存储交换的数
int tmp[numsSize];
int j=k;
//将原数组前n-k拷贝到新数组的后面
for(int i=0;i<numsSize-k;i++)
{
tmp[j++]=nums[i];
}
//将原数组后k个数据拷贝到新数组前k位置
j=0;
for(int i=numsSize-k;i<numsSize;i++)
{
tmp[j++]=nums[i];
}
//将新数组的数据拷贝到原来数组
for(int i=0;i<numsSize;i++)
{
nums[i]=tmp[i];
}
}
题目:
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
解法如下:(有两种方法)