您的位置:首页 > 其它

poj 字符串相关的水题

2017-06-26 13:09 381 查看
1035 Spell checker

Accepted 456K 375MS

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
//#include<math.h>
#include<algorithm>
#include<vector>
#include<map>
#define MAXNUM 10010
using namespace std;
int ans, h, w, W[45][15], link[405];
string dic[MAXNUM];
vector<int>result;
bool add(string s1,string s2)
{
int i, j;
bool flag;
flag = 0;
i = j = 0;
while (i < s1.length())
{
if (!flag)
{
if (s1[i] != s2[j])
{
j++;
flag = 1;
}
else
{
i++; j++;
}
}
else
{
if (s1[i] != s2[j])
{
return false;
}
else
{
i++; j++;
}
}
}
return true;
}
bool del(string s1, string s2)
{
int i, j;
bool flag;
flag = 0;
i = j = 0;
while (i < s1.length())
{
if (!flag)
{
if (s1[i] != s2[j])
{
i++; flag = 1;
}
else
{
i++; j++;
}
}
else
{
if (s1[i] != s2[j])
return false;
else
{
i++; j++;
}
}
}
return true;
}
int cmp(string s1, string s2)
{
int i, count;
count = 0;
for (i = 0; i < s1.length();i++)
if (s1[i] != s2[i])
count++;
return count;
}
int main(void)
{
//freopen("1.txt", "r", stdin);
int i, j, t,tmp;
bool flag;
string str;
t = 0;
while (cin >> dic[t] && dic[t] != "#") t++;
while (cin >> str&&str != "#")
{
result.clear();
flag = 0;
for (i = 0; i < t; i++)
{
tmp = str.length() - dic[i].length();
if (tmp>1 || tmp < -1)
continue;
else if (str.length() == dic[i].length() + 1)
{
if (del(str, dic[i]))
result.push_back(i);
}
else if (str.length() == dic[i].length() - 1)
{
if (add(str, dic[i]))
result.push_back(i);
}
else if (str.length() == dic[i].length())
{
tmp = cmp(str, dic[i]);
if (!tmp)
{
flag = 1;
break;
}
else if (tmp == 1)
result.push_back(i);
}
}
if (flag)
cout << str << " is correct" << endl;
else
{
cout << str << ":" ;
for (i = 0; i < result.size(); i++)
cout << " " << dic[result[i]];
cout << endl;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: