首页 > 代码库 > poj 1035 Spell checker
poj 1035 Spell checker
题意:对于给出的一些单词组成字典,然后对于每一个输入的单词检查,有以下几种情况:
1.这个单词在字典里有
2.这个单词删掉任意一个字母能在字典里有
3.这个单词插入任意一个字母能在字典里有
4.这个单词任意一个字母被替换在字典里有
这里可以用string,细心一点,10000个字典单词,50个查询单词,每个单词长度不超过15,那么可以对于每个查询单词暴力遍历判断一次
#include <iostream> #include <string> using namespace std; string dic[10005];//字典 string ans[10005];//可能有的答案 int sum,ans_sum;//字典单词数,可能答案数 string str;//临时输入的字符串 void Imput() { sum = 0; while(cin >> str) { if(str == "#") break; dic[sum ++] = str; } } void Print() { cout << str << ':'; for(int i = 0; i < ans_sum; i ++) cout << ' ' << ans[i]; cout<<endl; } void check() { while(cin >> str) { if(str == "#") break; ans_sum = 0; bool should_print = true;//是否要输出,这里对于 is correct 之后就不用后面的Print函数啦 for(int i = 0; i < sum; i ++) { if(str == dic[i]){ cout << str << " is correct" << endl; should_print = false; break; } else if(dic[i].length() == str.length()){ //长度相等,则可能有一个字母被替换 int flag = 0; for(int j = 0; j < dic[i].length(); j ++) { if(dic[i][j] != str[j]) flag ++; } if(flag == 1) ans[ans_sum ++] = dic[i]; } else if(dic[i].length() - str.length() == 1){ //在str中插入一个字母,比较 int flag = 0; for(int str_l = 0, dic_l = 0; str_l < str.length() && dic_l < dic[i].length(); ) { if(str[str_l] == dic[i][dic_l]) str_l ++, dic_l ++; else { dic_l ++; flag ++; } } if(!flag || flag == 1) ans[ans_sum++] = dic[i]; } else if(str.length() - dic[i].length() == 1){ //删除一个字母 int flag = 0; for(int str_l = 0, dic_l = 0; str_l < str.length() && dic_l < dic[i].length(); ) { if(str[str_l] == dic[i][dic_l]) str_l ++, dic_l ++; else { str_l ++; flag ++; } } if(!flag || flag == 1) ans[ans_sum++] = dic[i]; } } if(should_print) Print(); } } int main() { Imput(); check(); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。