校赛 选修课网址 1096: Is The Same?(kmp或者find)
2016-05-11 21:54
337 查看
1096: Is The Same?
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 30 Solved: 11
[Submit][Status][Web Board]
Description
给出2个字符串S和T,如果可以通过循环移位使得S和T相等,则我们称S和T是同构字符串, 例如S=“abcd”, T=“bcda”,则S和T是同构字符串;而S=“abcd”和T=“bcad”则不是同构字符串。
循环移位是指:在⼀个长度为n的字符串S中,取⼀个任意下标i,把字符串分为两段,分别为 S1S2...Si 和Si+1Si+2...Sn,然后把字符串变为Si+1Si+2...SnS1S2...Si,例如S=“qwerty”,取i=3, 则变 为”rtyqwe”(注意,一个字符串本⾝身也算是它的同构字符串)。
Input
第⼀行包含一个整数T(1 <= T <= 20),代表测试组数。
对于每组数据,包含2个字符串,字符串长度都小于等于105且非空,输入保证字符串只包含小写字⺟。
Output
对于每组数据,如果这两个字符串是同构字符串,则输出Yes,否则输出No。
Sample Input
2
abcd
bcda
abcd
bcad
Sample Output
Yes
No
HINT
Source
Alex@NBUT
将原字符串m重复两次 在新的字符串中查找是否有n 就像一串珠子 与边上的珠子都相对确定
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 30 Solved: 11
[Submit][Status][Web Board]
Description
给出2个字符串S和T,如果可以通过循环移位使得S和T相等,则我们称S和T是同构字符串, 例如S=“abcd”, T=“bcda”,则S和T是同构字符串;而S=“abcd”和T=“bcad”则不是同构字符串。
循环移位是指:在⼀个长度为n的字符串S中,取⼀个任意下标i,把字符串分为两段,分别为 S1S2...Si 和Si+1Si+2...Sn,然后把字符串变为Si+1Si+2...SnS1S2...Si,例如S=“qwerty”,取i=3, 则变 为”rtyqwe”(注意,一个字符串本⾝身也算是它的同构字符串)。
Input
第⼀行包含一个整数T(1 <= T <= 20),代表测试组数。
对于每组数据,包含2个字符串,字符串长度都小于等于105且非空,输入保证字符串只包含小写字⺟。
Output
对于每组数据,如果这两个字符串是同构字符串,则输出Yes,否则输出No。
Sample Input
2
abcd
bcda
abcd
bcad
Sample Output
Yes
No
HINT
Source
Alex@NBUT
将原字符串m重复两次 在新的字符串中查找是否有n 就像一串珠子 与边上的珠子都相对确定
#include<iostream> #include<cstring> #include<string> #include<sstream> #include<algorithm> using namespace std; int main() { string n,m,nn,mm; long long a,b,i,k; cin>>a; while(a--) { cin>>n>>m; k=5; if(n.size()!=m.size()) { k=0; } nn=n+n; mm=m+m; if((nn.find(m)!=string::npos||mm.find(n)!=string::npos)&&k) cout<<"Yes"<<endl; else cout<<"No"<<endl; mm=""; nn=""; } return 0; } /*kmp #include<iostream> #include<string> #include<cstring> using namespace std; int nexta[1000100]; void getnext(string n) { int i=0,j=-1; nexta[0]=-1; while(i<n.size()) { if(j==-1||n[i]==n[j]) { ++i; ++j; nexta[i]=j; } else j=nexta[j]; } } long long kmp(string n,string m) { int i=0,j=0; while(i<n.size()) { if(j==-1||n[i]==m[j]) { ++i; ++j; } else j=nexta[j]; if(j==m.size()) { return 3; } } return 0; } int main() { string n,m,nn,mm; long long a,b,c,i,d,k; cin>>a; while(a--) { memset(nexta,0,sizeof(nexta)); k=5; cin>>n>>m; nn=n+n; if(n.size()!=m.size()) { k=0; } getnext(m); if(kmp(nn,m)&&k) { cout<<"Yes"<<endl; } else cout<<"No"<<endl; } return 0; } */
相关文章推荐
- 关于MyElipse tomcat部署成功,却无法添加到webapps的问题
- servlet
- 移动设备、手机浏览器Javascript滑动事件代码
- Android调用系统相机照片和裁剪
- JAVA WEB环境配置(JDK1.7+TOMCAT_7.0.55+MYECLIPSE8.6)
- 2016"百度之星" - 测试赛 1002 列变位法解密 (模拟)
- TCP/IP详解(四)---ICMP:Internet控制报文协议
- 安装Erlang和Eclipse下的Erlide(Windows)
- Android 开源之StickyHeaderListView 标题渐变、吸附悬停、筛选分类、动态头部
- 自定义AlertDialog主题
- 算法实现之交换排序——冒泡与快排
- IOS第三方数据库FMDatabase的简单使用
- Git add和空目录杂谈
- nrf51822开发指导之温湿度传感器(DHT11)驱动程序
- MAC(Linux)升级Openssl
- C#三十二 泛型的理解和使用
- C#三十二 泛型的理解和使用
- 反射、注解与依赖注入总结
- NEU 1694 Primorial vs LCM 【数学】
- C#三十二 泛型的理解和使用