题目
796.旋转字符串
题目大意
给定两个字符串, s
和 goal
。如果在若干次旋转操作之后,s
能变成 goal
,那么返回 true
。
s
的 旋转操作 就是将 s
最左边的字符移动到最右边。
- 例如, 若
s = 'abcde'
,在旋转一次之后结果就是'bcdea'
。
样例
示例 1:
输入: s = "abcde", goal = "cdeab"
输出: true
示例 2:
输入: s = "abcde", goal = "abced"
输出: false
数据规模
提示:
1 <= s.length, goal.length <= 100
s
和goal
由小写英文字母组成
思路
数据范围很小,可以直接
O
(
n
2
)
O(n^2)
O(n2)模拟,枚举分割点
i
i
i,将
[
0
,
i
]
[0,i]
[0,i]字符移到右侧,而
[
i
+
1
,
l
e
n
−
1
]
[i+1,len-1]
[i+1,len−1]的字符移到左侧,组成新的字符串now
,如果now==goal
则返回
1
1
1,如果到最后都没有一个now==goal
,那么就返回
0
0
0
代码
// short int long float double bool char string void
// array vector stack queue auto const operator
// class public private static friend extern
// sizeof new delete return cout cin memset malloc
// relloc size length memset malloc relloc size length
// for while if else switch case continue break system
// endl reverse sort swap substr begin end iterator
// namespace include define NULL nullptr exit equals
// index col row arr err left right ans res vec que sta
// state flag ch str max min default charray std
// maxn minn INT_MAX INT_MIN push_back insert
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int>PII;
typedef pair<int, string>PIS;
const int maxn=3e4+50;//注意修改大小
long long read(){long long x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;}
ll qpow(ll x,ll q,ll Mod){ll ans=1;while(q){if(q&1)ans=ans*x%Mod;q>>=1;x=(x*x)%Mod;}return ans%Mod;}
class Solution {
public:
bool rotateString(string s, string goal) {
int len=s.length();
for(int i=0;i<len;i++){
string now;
for(int j=i+1;j<len;j++){
now+=s[j];
}
for(int j=0;j<=i;j++){
now+=s[j];
}
if(now==goal)return 1;
}
return 0;
}
};