| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
帮助后来人_水题请注意规则,1、删除一个字母;2、替换一个字母;3、插入一个字母
从中可以得出如下结论:1、欲纠错单词和字典内单词长度之差绝对值小于2;2、没有2,有的只是怎么减少时间,我写的代码仍然可以继续优化,懒得优化大概两百多ms
假设 len 是欲纠错单词temp长度;dic_len是字典单词dic_word长度
case 1:len == dic_len ----》判断是否有temp == dic_word
case 2:len == dic_len 单case1不成立,---》replace一个字母
case 3:len = dic_len - 1 -----》insert一个字母
case 4:len= dic_len + 1 -----》delete一个字母
具体附代码
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
char dictionary[10001][16];
int dictionary_count;
int dic_len[10001];
int word_len[16][10001];
int word_len_count[16];
char temp[16];
char temp_copy[16];
int main()
{
dictionary_count = 0;
int len;
int lens;
int flag;
while (scanf("%s", dictionary + dictionary_count) && dictionary[dictionary_count][0] != '#')//input
{
len = strlen(dictionary[dictionary_count]);
dic_len[dictionary_count] = len;
//len = strlen(dictionary[dictionary_count]);
word_len[len][word_len_count[len]] = dictionary_count;
word_len_count[len]++;
dictionary_count++;
}
while (scanf("%s", temp) && temp[0] != '#')
{
lens = strlen(temp);
//len - 1;
//if (len == 1)
//{
// for (int i = 0; i < word_len_count[len]; ++i)
// {
// }
//}
flag = false;
for (int i = 0; i < word_len_count[lens]; ++i)
{
if (strcmp(temp, dictionary[word_len[lens][i]]) == 0)
{
printf("%s is correct\n", temp);
flag = true;
break;
}
}
if (flag) continue;
printf("%s:", temp);
for (int i = 0; i < dictionary_count; ++i)
{
len = lens;
strcpy(temp_copy, temp);
if (len == dic_len[i])//replace
{
int t = 0;
for (int j = 0; j < len; ++j)
{
if (temp_copy[j] != dictionary[i][j])
{
t++;
}
}
if (t == 1)
{
printf(" %s", dictionary[i]);
}
}
else if (len == dic_len[i] + 1) //delete
{
int t;
for (t = 0; t < len; ++t)
{
if (temp_copy[t] != dictionary[i][t])
{
break;
}
}
for (; t < len; ++t)//del
{
temp_copy[t] = temp_copy[t + 1];
}
len--;
for (t = 0; t < len ; ++t)
{
if (temp_copy[t] != dictionary[i][t])
{
break;
}
}
if (t == len)
{
printf(" %s", dictionary[i]);
}
}
else if (len == dic_len[i] - 1)//insert
{
int t;
for (t = 0; t < dic_len[i]; ++t)
{
if (temp_copy[t] != dictionary[i][t])
{
break;
}
}
for (int j = len; j >= t; --j)
{
temp_copy[j + 1] = temp_copy[j];
}
temp_copy[t] = dictionary[i][t];
len++;
for (; t < len; ++t)
{
if (temp_copy[t] != dictionary[i][t])
{
break;
}
}
if (t == len)
{
printf(" %s", dictionary[i]);
}
}
}
printf("\n");
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator