POJ 2744 子串 解题报告
2009-01-22 18:29
309 查看
POJ 2744 子串 解题报告
编号:2744
考查点:字符串处理,大量的string.h函数使用.
思路:先找出最短的字符串,然后利用最短字符串从长到短产生搜索子串,然后进行匹配检测,难点应该是从长到短产生搜索子串时不能有遗漏..
提交情况:strrev函数不见了..改成_strrev()了,导致一直compile
error,在我自己VS里是可以编译过的撒,后来看到warning后改过来就AC了
Source Code:
//POJ Grids 2744
#include <iostream>
#include <string.h>
using namespace std;
char ch[100][101];
unsigned int sublen(char* pch,unsigned int len,int m)
{
char sub[101],rev[101];
memset(sub,0,101*sizeof(char));
memset(rev,0,101*sizeof(char));
unsigned int sublength = len;
while (sublength)
{
for (int i=0;sublength<=len-i;i++)
{
strncpy(sub,pch+i,sublength);
sub[sublength] = '\0';
strcpy(rev,sub);
_strrev(rev);
rev[sublength] = '\0';
bool flag = true;
for (int j=0;j<m;j++)
{
if (!(strstr(ch[j],sub)||strstr(ch[j],rev)))
{
flag = false;
break;
}
}
if (flag)
{
return sublength;
}
}
sublength--;
}
return sublength;
}
int main()
{
memset(ch,0,100*101*sizeof(char));
int n;
cin>>n;
for (int i=0;i<n;i++)
{
int m;
cin>>m;
unsigned int len = 101;
int index = 0;
char min[101];
memset(min,0,101*sizeof(char));
for (int j=0;j<m;j++)
{
cin>>ch[j];
if (len > strlen(ch[j]))
{
strcpy(min,ch[j]);
len = strlen(min);
index = j;
}
}
strcpy(ch[index],ch[m-1]);
int sub = sublen(min,len,m-1);
cout<<sub<<endl;
}
return 0;
}
总结:这道题有点复杂,但还不算难吧,搜索字串那点看了书才做出来的,比书上的代码优化了一点,不用在最短字符串自身搜索子串了..
By Ns517
Time 09.01.22
编号:2744
考查点:字符串处理,大量的string.h函数使用.
思路:先找出最短的字符串,然后利用最短字符串从长到短产生搜索子串,然后进行匹配检测,难点应该是从长到短产生搜索子串时不能有遗漏..
提交情况:strrev函数不见了..改成_strrev()了,导致一直compile
error,在我自己VS里是可以编译过的撒,后来看到warning后改过来就AC了
Source Code:
//POJ Grids 2744
#include <iostream>
#include <string.h>
using namespace std;
char ch[100][101];
unsigned int sublen(char* pch,unsigned int len,int m)
{
char sub[101],rev[101];
memset(sub,0,101*sizeof(char));
memset(rev,0,101*sizeof(char));
unsigned int sublength = len;
while (sublength)
{
for (int i=0;sublength<=len-i;i++)
{
strncpy(sub,pch+i,sublength);
sub[sublength] = '\0';
strcpy(rev,sub);
_strrev(rev);
rev[sublength] = '\0';
bool flag = true;
for (int j=0;j<m;j++)
{
if (!(strstr(ch[j],sub)||strstr(ch[j],rev)))
{
flag = false;
break;
}
}
if (flag)
{
return sublength;
}
}
sublength--;
}
return sublength;
}
int main()
{
memset(ch,0,100*101*sizeof(char));
int n;
cin>>n;
for (int i=0;i<n;i++)
{
int m;
cin>>m;
unsigned int len = 101;
int index = 0;
char min[101];
memset(min,0,101*sizeof(char));
for (int j=0;j<m;j++)
{
cin>>ch[j];
if (len > strlen(ch[j]))
{
strcpy(min,ch[j]);
len = strlen(min);
index = j;
}
}
strcpy(ch[index],ch[m-1]);
int sub = sublen(min,len,m-1);
cout<<sub<<endl;
}
return 0;
}
总结:这道题有点复杂,但还不算难吧,搜索字串那点看了书才做出来的,比书上的代码优化了一点,不用在最短字符串自身搜索子串了..
By Ns517
Time 09.01.22
相关文章推荐
- POJ 2744 子串 解题报告
- POJ - 2406 Power Strings解题报告(KMP,字符串划分成若干连续相同子串)
- poj1523 解题报告
- poj解题报告——1328
- 解题报告 poj 1011 木棒
- 【解题报告】pku数算mooc 第8周 图 兔子与星空(poj 5442)
- POJ 1125 解题报告
- 回文子串解题报告
- 解题报告:POJ 3162 Walking Race 树型DP+单调RMQ
- POJ 1068 解题报告
- POJ 1149 PIGS 解题报告
- Poj 2081 Recaman's Sequence之解题报告
- poj解题报告——1019
- POJ 3792 Area of Polycubes 解题报告
- POJ - 3268 Silver Cow Party解题报告(dijkstra分别求单源起点和单源终点的最短路)
- POJ 2528 解题报告
- poj解题报告——2068
- POJ 3983 解题报告
- POJ2739解题报告
- poj 2976-Dropping tests解题报告