POJ 1035 Spell checker 简单字符串匹配
2013-08-12 10:32
633 查看
在输入的单词中删除或替换或插入一个字符,看是否在字典中。直接暴力,172ms。。
View Code
#include <stdio.h> #include <string.h> int len[10000]; char dic[10000][20], s[20]; bool del(char s1[], char s2[]) { bool isdel = 0; for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++) { if(s1[i] != s2[j]) { if(isdel) return 0; j--; isdel = 1; } } return 1; } bool rep(char s1[], char s2[]) { bool isrep = 0; for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++) { if(s1[i] != s2[j]) { if(isrep) return 0; isrep = 1; } } return 1; } bool ins(char s1[], char s2[]) { bool isins = 0; for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++) { if(s1[i] != s2[j]) { if(isins) return 0; i--; isins = 1; } } return 1; } int main() { int cnt = 0; while(scanf("%s", dic[cnt]) != EOF) { if(dic[cnt][0] == '#')break; len[cnt] = strlen(dic[cnt++]); } while(scanf("%s", s) != EOF) { if(s[0] == '#')break; bool ok = 0; for(int i = 0; i < cnt; i++) { if(strcmp(s, dic[i]) == 0) { ok = 1; printf("%s is correct", s); } } if(!ok) { printf("%s:", s); int len_s = strlen(s); for(int i = 0; i < cnt; i++) { if(len_s - len[i] == 1 && del(s, dic[i])) printf(" %s", dic[i]); if(len_s - len[i] == 0 && rep(s, dic[i])) printf(" %s", dic[i]); if(len_s - len[i] == -1 && ins(s, dic[i])) printf(" %s", dic[i]); } } printf("\n"); } return 0; }
View Code
相关文章推荐
- poj1035 简单字符串匹配
- pku 1035 Spell checker(带误差的字符串匹配)
- POJ 1035 Spell checker(字符串简单匹配)
- poj 1936 All in All 简单的字符串匹配
- 【原】 POJ 1035 Spell checker 编辑距离 解题报告
- poj 1035 Spell checker ( 字符串处理 )
- poj 1035 Spell checker【字符串】
- poj 1035 Spell checker 字符串,暴力
- poj1035——Spell checker(串)
- POJ 1035 Spell checker (字符串模拟)
- POJ 1035 Spell checker(哈希表)
- Spell checker(POJ--1035
- POJ1035——Spell checker(字符串处理)
- [ACM] POJ 1035 Spell checker (单词查找,删除替换添加不论什么一个字母)
- Spell checker (poj 1035 字符串)
- POJ1035 Spell-checker(哈希,串处理)
- POJ 1035:Spell checker:字符串操作
- poj 3295 Tautology && poj 1035 Spell checker 【字典树】
- Spell checker poj 1035 (串的练习)
- POJ 1035-Spell checker(字符串)