Spell checker

Time Limit: 2000MS Memory Limit: 65536K

Total Submissions: 19319 Accepted: 7060

Description



You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given words using a known dictionary of all correct words in all their forms.


If the word is absent in the dictionary then it can be replaced by correct words (from the dictionary) that can be obtained by one of the following operations:


?deleting of one letter from the word;

?replacing of one letter in the word with an arbitrary letter;

?inserting of one arbitrary letter into the word.

Your task is to write the program that will find all possible replacements from the dictionary for every given word.


Input



The first part of the input file contains all words from the dictionary. Each word occupies its own line. This part is finished by the single character '#' on a separate line. All words are different. There will be at most 10000 words in the dictionary.


The next part of the file contains all words that are to be checked. Each word occupies its own line. This part is also finished by the single character '#' on a separate line. There will be at most 50 words that are to be checked.


All words in the input file (words from the dictionary and words to be checked) consist only of small alphabetic characters and each one contains 15 characters at most.


Output



Write to the output file exactly one line for every checked word in the order of their appearance in the second part of the input file. If the word is correct (i.e. it exists in the dictionary) write the message: " is correct". If the word is not correct then
write this word first, then write the character ':' (colon), and after a single space write all its possible replacements, separated by spaces. The replacements should be written in the order of their appearance in the dictionary (in the first part of the
input file). If there are no replacements for this word then the line feed should immediately follow the colon.

Sample Input



i

is

has

have

be

my

more

contest

me

too

if

award

#

me

aware

m

contest

hav

oo

or

i

fi

mre

#

Sample Output



me is correct

aware: award

m: i my me

contest is correct

hav: has have

oo: too

or:

i is correct

fi: i

mre: more me

Source

Northeastern Europe 1998

<span style="color:#000099;">/******************************************
author : Grant Yuan
time : 2014/10/3 0:38
algorithm : 暴力
source : POJ 1035
*******************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<string> using namespace std;
const int MAX=10007;
struct word
{
char str[15];
int len;
}; word s[MAX];
int n;
queue<int> ans;
inline bool slove1(word s1,word s2)//推断两个字符串是否相等
{
if(strcmp(s1.str,s2.str)==0) return 1;
return 0;
}
inline bool slove2(word s1,word s2)//推断能否够由一个字符串添加或者降低一个字符得到还有一个字符串
{
int l1=s1.len,l2=s2.len;
int i,j;
bool ans=1;
for(i=0;i<l1&&i<l2;i++)
{
if(s1.str[i]!=s2.str[i]) ans=0;
}
if(ans) return 1;
for(i=0,j=0;i<l1&&j<l2;)
{
if(s1.str[i]==s2.str[j]){ i++;j++;}
else i++;
}
if(i==l1&&j==l2) return 1;
return 0;
}
inline bool slove3(word s1,word s2)//是否两个字符串仅仅有一个字符不想等
{
int ans=0;
int l=s1.len;
for(int i=0;i<l;i++)
{
if(s1.str[i]!=s2.str[i]) ans++;
}
if(ans==1) return 1;
return 0;
}
int main()
{
while(!ans.empty()) ans.pop();
word s1;
int n=0;
while(scanf(" %s",s1.str)!=EOF){
if(strcmp(s1.str,"#")==0) break;
strcpy(s[++n].str,s1.str);
s[n].len=strlen(s1.str);
}
while(scanf(" %s",s1.str)!=EOF){
while(!ans.empty()) ans.pop();
if(strcmp(s1.str,"#")==0) break;
bool flag=1;
s1.len=strlen(s1.str);
for(int i=1;i<=n;i++)
{
int l2=s[i].len,l1=s1.len;
bool ans1=0;
if(l1==l2){
if(slove1(s1,s[i])) ans1=1;
}
if(ans1){flag=0;printf("%s is correct\n",s1.str);break;}
if(l1==l2){
if(slove3(s1,s[i])) ans.push(i);
}
if(l1-l2==1){
if(slove2(s1,s[i])) ans.push(i);
}
if(l2-l1==1){
if(slove2(s[i],s1)) ans.push(i);
}
}
if(flag){
printf("%s:",s1.str);
while(!ans.empty()){printf(" %s",s[ans.front()].str);ans.pop();}
printf("\n");
}
}
return 0;
}
</span>

版权声明:本文博主原创文章,博客,未经同意,不得转载。

POJ 1035 代码+具体的目光的更多相关文章

  1. poj 1035 Spell checker(hash)

    题目链接:http://poj.org/problem?id=1035 思路分析: 1.使用哈希表存储字典 2.对待查找的word在字典中查找,查找成功输出查找成功信息 3.若查找不成功,对word增 ...

  2. POJ 1035 Spell checker 字符串 难度:0

    题目 http://poj.org/problem?id=1035 题意 字典匹配,单词表共有1e4个单词,单词长度小于15,需要对最多50个单词进行匹配.在匹配时,如果直接匹配可以找到待匹配串,则直 ...

  3. POJ 1035 Spell checker(串)

    题目网址:http://poj.org/problem?id=1035 思路: 看到题目第一反应是用LCS ——最长公共子序列 来求解.因为给的字典比较多,最多有1w个,而LCS的算法时间复杂度是O( ...

  4. poj 1035

    http://poj.org/problem?id=1035 poj的一道字符串的水题,不难,但就是细节问题我也wa了几次 题意就是给你一个字典,再给你一些字符,首先如果字典中有这个字符串,则直接输出 ...

  5. poj 1035 Spell checker(水题)

    题目:http://poj.org/problem?id=1035 还是暴搜 #include <iostream> #include<cstdio> #include< ...

  6. 关于部分应用无法向POJ提交代码的解决方案

    有个一年没做过题了,最近有骚年反映他们的VirtualJudge无法做POJ的题目,一直都是JudgeError状态. 于是登录到那个VJudge试了试,代码的确一直无法提交成功,他们的服务器发回50 ...

  7. poj 1035 Spell checker ( 字符串处理 )

    Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16675   Accepted: 6087 De ...

  8. 【POJ 1035】Spell checker

    题 题意 每个单词,如果字典里存在,输出”该单词 is correct“:如果字典里不存在,但是可以通过删除.添加.替换一个字母得到字典里存在的单词,那就输出“该单词:修正的单词”,并按字典里的顺序输 ...

  9. POJ 1035 Spell checker (模拟)

    题目链接 Description You, as a member of a development team for a new spell checking program, are to wri ...

随机推荐

  1. PHP制作pdf文档方法

    原文:PHP制作pdf文档方法 本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经 ...

  2. 50一个Android开发技巧(01 利用好layout_weight属性)

    问题:如何将一个Button放置在布局的中间,并设置其宽度parent的50%? 分析:问题想要达到的效果应该是这样: (原文地址:http://blog.csdn.net/vector_yi/art ...

  3. ZOJ 3820 Building Fire Stations

    题意: 树上找两个点  使得其它点到这两点随意一点的距离的最大值最小 思路: 最大值最小  想到二分  在二分的基础上判定这个最大值是否可能 怎样判定这个问题就是怎样选那两个点的问题  非常明显  我 ...

  4. vijos 1234 口袋的天空

    最小生成树kruscal算法 #include<iostream> #include<algorithm> #include<cstring> #define ma ...

  5. css javascript 自动化压缩(保存后即自动生成压缩文件)

    先上图:

  6. apache kafka系列之-监控指标

    apache kafka中国社区QQ群:162272557 1.监控目标 1.当系统可能或处于亚健康状态时及时提醒,预防故障发生 2.报警提示 a.短信方式 b.邮件 2.监控内容 2.1 机器监控 ...

  7. Android 应用程序窗口显示状态操作(requestWindowFeature()的应用)

     我们在开发程序是常常会须要软件全屏显示.自己定义标题(使用button等控件)和其它的需求,今天这一讲就是怎样控制Android应用程序的窗口显示. 首先介绍一个重要方法那就是requestWi ...

  8. GPU 编程入门到精通(五)之 GPU 程序优化进阶

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识.鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程. 有志同道合的小伙 ...

  9. MySQL之终端(Terminal)管理MySQL

    原文:MySQL之终端(Terminal)管理MySQL 前言:MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”. 现在我写MySQL的终端命令操作 ...

  10. java求最大公约数(分解质因数)

    下面是四种用java语言编程实现的求最大公约数的方法: package gcd; import java.util.ArrayList; import java.util.List; public c ...