一道旋转字符串问题

本文介绍了LeetCode中的一道题目,即如何判断一个字符串经过旋转操作后能否变成另一个字符串。作者提供了三种不同的C++解决方案,包括使用字符串拼接、双指针以及逐位旋转的方法。这些方法都巧妙地利用了字符串的特性来快速判断是否匹配。
摘要由CSDN通过智能技术生成

题目描述

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

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

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

一些解法

bool rotateString(char * A, char * B){
	if (strlen(A) != strlen(B)) return false;
	char* s = (char*)calloc(strlen(A)*2+1,sizeof(char));
	strcat(strcat(s,A),A);
	return strstr(s,B);
}

作者:13317713879
链接:https://leetcode-cn.com/problems/rotate-string/solution/cyu-yan-4xing-dai-ma-xiao-lu-gang-gang-de-by-13317/
class Solution {
public:
    bool rotateString(string A, string B) {
        return A.size() == B.size() && (A + A).find(B) != string::npos;
    }
};

作者:da-li-wang
链接:https://leetcode-cn.com/problems/rotate-string/solution/c-yi-xing-ti-jie-by-da-li-wang-4/
bool rotateString(char * A, char * B){
    int i, len = strlen(A);
    if(strcmp(A, B) == 0)
        return true;
    for(i = 0;i < len;i++)
    {
        char a = A[0];
        for(int j = 1;j < len;j++)
        {
            A[j - 1] = A[j];
        }
        A[len - 1] = a;
        if(strcmp(A, B) == 0)
        {
            return true;
        }
    }
    return false;
}

作者:fei-240
链接:https://leetcode-cn.com/problems/rotate-string/solution/cyu-yan-shuang-100-jian-dan-yi-dong-by-fei-240/
public class Solution {
    public boolean solve (String A, String B) {
        if(A.length()!=B.length()) return false;
        return (A+A).contains(B);
    }
}
class Solution:
    def solve(self , A , B ):
        m = len(A)
        n = len(B)
        if m != n:
            return False
        # 判断相同位置字符
        for j in range(m):
            # A字符串从0开始
            # B字符串每逐位位置作为起始比较
            if self.comp(A, B, 0, j):
                return True
        # 不一样
        return False
    
    # 逐位比较字符串
    def comp(self, string, move, i, j):
        length = len(string)
        # 逐位比较 j索引使用%来旋转
        while i < length and string[i] == move[j%length]:
            i += 1
            j += 1
        # 匹配完整性判断
        return True if i == length else False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值