每日OJ题_牛客_NC114旋转字符串_C++_Java

目录

牛客_NC114旋转字符串

题目解析

C++代码1模拟

C++代码2找规律

Java代码


牛客_NC114旋转字符串

旋转字符串_牛客题霸_牛客网

描述:

字符串旋转:

给定两字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(可以为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。

例如:如果A=‘youzan’,B=‘zanyou’,A按‘you’‘zan’切割换位后得到‘zanyou’和B相同,返回true。

再如:如果A=‘abcd’,B=‘abcd’,A切成‘abcd’和''(空串),换位后可以得到B,返回true。

数据范围:A,B字符串长度满足 n≤1000n≤1000,保证字符串中仅包含小写英文字母和阿拉伯数字

进阶: 时间复杂度 O(n),空间复杂度 O(n)


题目解析

  • 第一种解法:按照题目的要求模拟,每次旋转⼀下 A 字符串,看看是否和 B 字符串相同。
  • 第二种解法:需要找到字符串旋转之后能匹配所满足的性质。如果 A 字符串能够旋转之后得到 B 字符串的话,在 A 字符串倍增之后的新串中,⼀定是可以找到B 字符串的。因此仅需让 A 字符串倍增,然后查找 B 字符串即可。

C++代码1模拟

class Solution {
public:
    bool solve(string A, string B) {
        for(int i = 1; i <= A.size(); ++i)
        {
            string tmp1 = A.substr(0, i);
            string tmp2 = A.substr(i, A.size());
            if(tmp2 + tmp1 == B)
                return true;
        }
        return false;
    }
};

C++代码2找规律

class Solution {
public:
    bool solve(string A, string B) {
        if(A.size() != B.size())
            return false;
        return (A + A).find(B) != -1;
    }
};

Java代码

import java.util.*;
public class Solution
{
    public boolean solve (String A, String B) 
    {
        if(A.length() != B.length())
            return false;
        return (A + A).contains(B);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GR鲸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值