【每日刷题】旋转字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/86258246

day15, 旋转字符串

题目来源:leetcode
给定两个字符串, A 和 B。
A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = ‘abcde’,在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后,A 能变成B,那么返回True。

示例 1:
输入: A = ‘abcde’, B = ‘cdeab’
输出: true

示例 2:
输入: A = ‘abcde’, B = ‘abced’
输出: false

解答:这是一个很简单很简单的题目,这里主要是介绍一种优秀的做法。
首先说我的做法,比较常规,先A与B比较,若 A = B 则return true,否则,开始对A移动,设置个标志flag = 0,用来记录已经多少次移动A,当A==A.size()时候表示二者无法通过移动来使其相等,返回false.

代码:

class Solution {
public:
    string move( string A){
        string B = "";
        B += A[ A.size() - 1];
        for( int i = 0; i < A.size() - 1; i++)
            B = B + A[i];
        return B;
    }
    bool rotateString(string A, string B) {
        if( A.size() != B.size())
            return false;
        int flag = 0;
        while( 1){
            if( A == B)
                return true;
            if( flag == A.size() + 1)
                return false;
            
            A = move( A);
            flag++;
        }
        return false;
    }
};

结果:一如既往的渣渣。
image.png-22.9kB

贴上一个大神的做法,没什么好说的,认真感悟+膜拜。

return A.length() == B.length() && (A + A).find(B) != string::npos;

我的微信公众号

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sd4567855/article/details/86258246