HDU2203——字符串

http://acm.hdu.edu.cn/showproblem.php?pid=2203

 

    刚看题目觉得应该有点难度,后来做起来才发现并不难,总觉得做ACM题目的时候,脑袋看得会比较复杂,可对于细节的东西却又没有想到周全,真是矛盾呀!

    大概的解题思路:循环移位可以靠指针来向后移动代替,循环左移和循环右移出来的结果集都是一样的,所以我选择全部向右移动。

首先找到与第一个元素相同的元素的位置,向后比较,看是否全部相同,如果全部相同者是亲和串。如果不是全相相同,则向后查找下一个与第一个元素相同的元素位置,一直下去,直到找不到这样的元素为止。

 

#include<stdio.h> #include<string.h> char s1[100005],s2[100005]; int Find(int x,int y,char c) { int i; for(i=x;i<y;i++) { if(s1[i]==c) return i; } return -1; } int main() { int len1,len2,i,j,k; while(scanf("%s%s",s1,s2)!=EOF) { len1=strlen(s1); len2=strlen(s2); if(len1<len2) { printf("no/n"); } else { i=-1; while(i<len1) { i=Find(i+1,len1,s2[0]); if(i==-1) { printf("no/n"); break; } else { k=i; for(j=0;j<len2;j++) { if(s1[k]!=s2[j]) break; if(k==len1-1) // last element k=0; else k++; } if(j==len2) { printf("yes/n"); break; } } } } memset(s1,0,100005); memset(s2,0,100005); } return 0; }

你可能感兴趣的:(c)