poj 1035 Spell checker【字符串】
大致题意:
输入一部字典,输入若干单词
1、 若某个单词能在字典中找到,则输出corret
2、 若某个单词能通过 变换 或 删除 或 添加一个字符后,在字典中找得到,则输出这些单词,输出顺序根据 输入的那部字典的字典序
3、 若某个单词无论操作与否都无法在字典中找得到,则输出空
View Code
#include<stdio.h> #include<string> #include<vector> #include<iostream> using namespace std; vector<string> vec; bool is_equal(string a, string b) //判断两个串是否相等。 { if(a == b) { cout << a << " is correct\n"; return 1; } return 0; } void change(string a, string b) //改变一个字符是否相等。 { int len = a.length(); int n = 0; for(int i = 0; i < len; i++) { if(a[i] != b[i]) { n++; } if(n > 1) return; } cout << " " << b; } void change1(string a, string b, bool mark) //判断增加一个字符或减少一个字符是否相等。 { int len = a.length(); for(int i = 0; i < len; i++) { if(a[i] != b[i]) { string temp = a; temp.erase(i, 1); if(temp == b && mark) { cout << " " << b; } else if(temp == b && !mark){ cout << " " << a; } else { return ; } } } } int main() { string str; while(cin >> str) { if(str == "#") break; vec.push_back(str); } int n = vec.size(); while(cin >> str) { if(str == "#") break; bool bl = 0; for(int i = 0; i < n; i++) { bl = is_equal(str, vec[i]); if(bl) break; } if(bl) continue; cout << str << ":"; int len = str.length(); for(int i = 0; i < n; i++) { int vlen = vec[i].length(); if(len == vlen) { change(str, vec[i]); } else if(len == vlen + 1) { change1(str, vec[i], 1); } else if(vlen == len + 1) { change1(vec[i], str, 0); } } cout << endl; } return 0; }
注意:用C++提交,G++会超时,不知道为什么。有人知道答案给我留言,谢谢!