本文主要是介绍【C++】旋转字符串——精准与否,就是屠宰和手术的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
✨题目链接:
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字符串长度满足 𝑛≤1000n≤1000,保证字符串中仅包含小写英文字母和阿拉伯数字
进阶: 时间复杂度 𝑂(𝑛)O(n),空间复杂度 𝑂(𝑛)O(n)
✨示例1
📍输入
"youzan","zanyou"
📍输出
true
✨示例2
📍输入
"youzan","zyouan"
📍输出
false
✨示例3
📍输入
"nowcoder","nowcoder"
📍输出
true
✨解题思路
巧妙的解题思路:如果A分割开转换位置可以拼成B,那么如果两个A直接合并,一定中间有个B。
例如:
A=“youzan”, B="zanyou"
- 我们如果直接将两个A拼接起来,(A+=A),就可以得到一个这样的字符串
“youzanyouzan”
- 这个时候A中一定包含B
- 判断B是否是A的子串
✨代码
class Solution {
public:bool solve(string A, string B) {int lena = A.size(), lenb = B.size();if (lena != lenb) {return false;}A += A;if (A.find(B) != string::npos) {return true;}return false;}
};
※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持
这篇关于【C++】旋转字符串——精准与否,就是屠宰和手术的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!