力扣 旋转字符串
一、完整题目
给定两个字符串, s 和 goal。
如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。
s 的旋转操作就是将 s 最左边的字符移动到最右边。
例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。
示例 1:
输入: s = “abcde”, goal = “cdeab”
输出: true
示例 2:
输入: s = “abcde”, goal = “abced”
输出: false
提示:
1 <= s.length, goal.length <= 100
s 和 goal 由小写英文字母组成
二、解题思路
- 创建一个左指针,指向每次旋转过后的最左边,也就是开头
- 每次旋转后进行一次比较,如果有不一致的就继续旋转
- 直至所有字符都移动了一遍
- 退出循环,输出结果
旋转后的当前位置可以这么求:
(left + j) % len
left为左指针,即s下标,j为比较过程中的第几个元素,len为字符串s的长度
三、编写代码
bool rotateString(char * s, char * goal){
//长度
int len;
len = strlen(s);//求s长度
//头指针
int left = 0;
//临时变量
int i = 0, j;
//完成标志
int flag = 1;
if(len != strlen(goal)) return false;
while ((i++) < len)
{
//判断s和goal是否相等
for (j = 0, flag = 1; j < len; j++)
{
if (s[(left + j) % len] != goal[j])
{
flag = 0;
break;
}
}
if (flag == 1) break;
//旋转
left++;
}
if (flag == 1) return true;
else return false;
}
四、测评结果
五、总结评价
这道题的做法很多,我只做了一种,也是比较容易想到的,标记下开始下标,进行比较。其实还可以在s后面再接一个s,也就相当于完全旋转完了,直接比较就行;或者利用链表等等,大家把思路打开,把每个方法都做做。
有问题欢迎各位大佬指出
力扣系列将持续更新,欢迎关注,一起学习