POJ 1035-Spell checker(字符串)
2017-05-29 14:50
453 查看
题目地址:POJ 1035
题意:输入一部字典。输入若干单词。 若某个单词能在字典中找到,则输出corret。若某个单词能通过 变换 或 删除 或 加入一个字符后。在字典中找得到。则输出这些单词。输出顺序依据 输入的那部字典的字典序;若某个单词不管操作与否都无法在字典中找得到,则输出空。
思路:关于全然匹配的就直接输出就好。解题关键在不全然匹配的情况:比較时我们先算两个单词长度差之差,有三种情况:len1=strlen(str)len2=strlen(mp
]
假设len1==len2则是可能有一个字符不一样;逐个字符比較。统计不同字符数
假设len1+1==len2则是少一个字符。逐个字符比較,假设有字符不同。则mp
字符下标往下移动一位。str不变,不同字符数加1
假设len1-1==len2则是多一个字符,逐个字符比較。假设有字符不同。则str字符下标往下移动一位。mp
不变。不同字符数加1
题意:输入一部字典。输入若干单词。 若某个单词能在字典中找到,则输出corret。若某个单词能通过 变换 或 删除 或 加入一个字符后。在字典中找得到。则输出这些单词。输出顺序依据 输入的那部字典的字典序;若某个单词不管操作与否都无法在字典中找得到,则输出空。
思路:关于全然匹配的就直接输出就好。解题关键在不全然匹配的情况:比較时我们先算两个单词长度差之差,有三种情况:len1=strlen(str)len2=strlen(mp
]
假设len1==len2则是可能有一个字符不一样;逐个字符比較。统计不同字符数
假设len1+1==len2则是少一个字符。逐个字符比較,假设有字符不同。则mp
字符下标往下移动一位。str不变,不同字符数加1
假设len1-1==len2则是多一个字符,逐个字符比較。假设有字符不同。则str字符下标往下移动一位。mp
不变。不同字符数加1
#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <sstream> #include <algorithm> #include <set> #include <queue> #include <stack> #include <map> #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; typedef __int64 LL; const int inf=0x3f3f3f3f; const double pi= acos(-1.0); const double esp=1e-7; const int maxn=10010; char mp[maxn][20]; char str[20]; int check(int n) { int i,j; int cnt; int len1=strlen(str); int len2=strlen(mp ); if(len1-len2==1) { cnt=0; i=j=0; for(; i<len1;) { if(str[i]!=mp [j]) { cnt++; i++; } else { i++; j++; } } if(cnt==1) return 1; return 0; } else if(len1==len2) { cnt=0; i=j=0; for(; i<len1;) { if(str[i]!=mp [j]) cnt++; i++,j++; } if(cnt==1) return 1; return 0; } else if(len1-len2==-1) { cnt=0; i=j=0; for(; j<len2;) { if(str[i]!=mp [j]) { cnt++; j++; } else { i++; j++; } } if(cnt==1) return 1; return 0; } return 0; } int main() { int n=0,i; while(~scanf("%s",mp )) { if(mp [0]=='#') break; n++; } while(~scanf("%s",str)) { if(str[0]=='#') break; for(i=0; i<n; i++) { if(strcmp(str,mp[i])==0) { printf("%s is correct\n",str); break; } } if(i==n) { printf("%s:",str); for(i=0; i<n; i++) if(check(i)) printf(" %s",mp[i]); puts(""); } } return 0; }
相关文章推荐
- Spell checker POJ 1035 字符串
- POJ 1035 Spell checker 字符串暴力
- POJ 1035 Spell checker【字符串暴力处理】
- POJ 1035-Spell checker(字符串)
- POJ 1035 Spell checker(字符串处理)
- 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 字符串容错检查
- poj 1035 Spell checker ( 字符串处理 )
- POJ 1035 Spell checker(字符串比较)
- Spell checker (poj 1035 字符串)
- POJ1035——Spell checker(字符串操作)
- POJ Spell checker(1035)-字符串处理
- poj 1035 Spell checker【字符串】
- poj 1035 Spell checker(字符串处理)
- POJ 1035 Spell checker(字符串)