Leetcode每日一题 —— 796. 旋转字符串

力扣 LeetCode 796. 旋转字符串 - 力扣(LeetCode) 796. 旋转字符串 - 给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。 s 的 旋转操作 就是将 s 最左边的字符移动到最右边。 * 例如, 若 s = 'ab...
Leetcode每日一题 —— 796. 旋转字符串
Leetcode每日一题 —— 796. 旋转字符串
力扣 LeetCode

796. 旋转字符串 - 力扣(LeetCode)

796. 旋转字符串 - 给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。 s 的 旋转操作 就是将 s 最左边的字符移动到最右边。  * 例如, 若 s = 'abcde',在旋转一次之后结果就是'bcdea' 。   示例 1: 输入: s = "abcde", goal = "cdeab" 输出: true 示例 2: 输入: s = "abcde", goal = "abced" 输出:...

看来这周是旋转周(´∇`‘’)


思路

根据题目条件可以得知,我可以不断循环左移字符串。匹配 goal 串的话,就相当于 s 串指针可以循环往右移动,可以用字串匹配暴力法。


代码

class Solution {
public:
    bool rotateString(string s, string goal) {
        // 循环左移字符串 + 字符串匹配
        int sLen=s.size();
        if(sLen!=goal.size()){
            // 长度不相同那肯定就不行了
            return false;
        }
        int numMatches=0;
        for(int i=0;i<sLen;i++){
            int p=i;
            for(int j=0;j<goal.size();j++){
                if(goal[j]!=s[p]){
                    // 失配
                    numMatches=0;
                    break;
                }
                numMatches++;
                p=(p+1)%sLen;
            }
            if(numMatches==sLen){
                // 全部匹配了
                return true;
            }
        }
        return false;
    }
};

2 个帖子 - 2 位参与者

阅读完整话题

来源: linux.do查看原文