力扣 旋转字符串 C语言 题解

力扣 旋转字符串


一、完整题目

给定两个字符串, 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,也就相当于完全旋转完了,直接比较就行;或者利用链表等等,大家把思路打开,把每个方法都做做。

有问题欢迎各位大佬指出
力扣系列将持续更新,欢迎关注,一起学习

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S1XmKl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值