poj1226(字符串)
来源:互联网 发布:德里苏丹国 知乎 编辑:程序博客网 时间:2024/06/05 18:00
题意:找出给出的n个串中的最长的公共字串,输出其长度。
分析:这道题比较水,KMP,string,strstr应该是都能过的,暴力就行。
wa的原因:这题比较颠覆我的世界观,一模一样的代码,scanf无限TLE,全改成cin AC。不理解是为什么,求大牛指点。
AC的代码:
#include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>using namespace std;char str[100][150];int fail[150];/*int kmp(char* str,char* pat){int i,j,k;memset(fail,-1,sizeof(fail));for(i=1;pat[i];++i){for(k=fail[i-1];k>=0&&pat[i]!=pat[k+1];k=fail[k]);if(pat[k+1]==pat[i])fail[i]=k+11;}i=j=0;while(str[i]&&pat[j]){if(pat[j]==str[i])++i,++j;else if(j==0)++i;else j=fail[j-1]+1;}if(pat[j])return -1;else return i-j;}*/int main(){int t;while (cin>>t){while(t--){int n;//scanf("%d",&n);cin>>n;int len=150,min=150;char str0[110];int tex;for(int i=0;i<n;++i){//scanf("%s",str[i]);cin>>str[i];len=strlen(str[i]);if(len<min){min=len;//memset(str0,0,sizeof(str0));strcpy(str0,str[i]);tex=i;}}if(n==1){cout<<strlen(str[0])<<endl;continue;}int k=strlen(str0);for(int j=k;j>=0;--j){int flag=0;for(int m=0;m<=k-j;++m){char tem[150];memset(tem,0,sizeof(tem));int s,t;for(s=0,t=m;s<j;++t,++s)tem[s]=str0[t];//str0[t]='\0';flag=0;char temp[150];strcpy(temp,tem);reverse(tem,tem+j);for(int i=0;i<n;++i){if(!strstr(str[i],tem)&&!strstr(str[i],temp)&&i!=tex){flag=1;break;}}if(flag==0){cout<<j<<endl;break;}}if(flag==0)break;}}}return 0;}
- poj1226---字符串
- poj1226(字符串)
- poj1226
- poj1226
- poj1226
- poj1226
- poj1226
- poj1226
- poj1226
- poj1226
- POJ1226
- POJ1226 Substrings
- poj1226 Substrings
- Substring poj1226
- POJ1226--Substrings
- poj1226 KMP
- poj1226--Substrings
- poj1226(哈希)
- SQL命令大全-中英文对照
- 判断从Web Form接收到的数据是否被修改
- sql server2008用getdate()查询所得时间和本地PC时间不一致
- C# GDI+ 各种操作
- JavaMe 编程连载(9) - 重构之数据永久存储
- poj1226(字符串)
- 《算法导论》笔记--红黑树(二)
- ssh远程执行脚本
- bootloader 内核启动参数
- quartz任务调度Cron表达式
- 随笔
- JAVA-SSH2:JSch试用
- Uboot 启动流程简介
- MiniGUI移植到s3c2410