题目
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
代码
#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;
}
};
|