您的位置:首页 > 其它

POJ 1035 Spell checker 简单字符串匹配

2013-08-12 10:32 633 查看
在输入的单词中删除或替换或插入一个字符,看是否在字典中。直接暴力,172ms。。

#include <stdio.h>
#include <string.h>
int len[10000];
char dic[10000][20], s[20];

bool del(char s1[], char s2[])
{
bool isdel = 0;
for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++)
{
if(s1[i] != s2[j])
{
if(isdel)
return 0;
j--;
isdel = 1;
}
}
return 1;
}

bool rep(char s1[], char s2[])
{
bool isrep = 0;
for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++)
{
if(s1[i] != s2[j])
{
if(isrep)
return 0;
isrep = 1;
}
}
return 1;
}

bool ins(char s1[], char s2[])
{
bool isins = 0;
for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++)
{
if(s1[i] != s2[j])
{
if(isins)
return 0;
i--;
isins = 1;
}
}
return 1;
}

int main()
{
int cnt = 0;
while(scanf("%s", dic[cnt]) != EOF)
{
if(dic[cnt][0] == '#')break;
len[cnt] = strlen(dic[cnt++]);
}
while(scanf("%s", s) != EOF)
{
if(s[0] == '#')break;
bool ok = 0;
for(int i = 0; i < cnt; i++)
{
if(strcmp(s, dic[i]) == 0)
{
ok = 1;
printf("%s is correct", s);
}
}
if(!ok)
{
printf("%s:", s);
int len_s = strlen(s);
for(int i = 0; i < cnt; i++)
{
if(len_s - len[i] == 1 && del(s, dic[i]))
printf(" %s", dic[i]);
if(len_s - len[i] == 0 && rep(s, dic[i]))
printf(" %s", dic[i]);
if(len_s - len[i] == -1 && ins(s, dic[i]))
printf(" %s", dic[i]);
}
}
printf("\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: