欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 每日OJ题_牛客_NC114旋转字符串_C++_Java

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

2025/11/12 2:11:08 来源:https://blog.csdn.net/GRrtx/article/details/143815826  浏览:    关键词:每日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);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词