poj 1035

http://poj.org/problem?id=1035

poj的一道字符串的水题,不难,但就是细节问题我也wa了几次

题意就是给你一个字典,再给你一些字符,首先如果字典中有这个字符串,则直接输出,如果没有的话,那就找字符串加一个字符或少一个字符或者换一个字符是否可以在字典中找到相应的字符串

解题思路:我是用string类型的,比较方便看两个字符串是否相等,用char的话,就是strcmp函数也行。

如果找不到相等的,那么久分别在字典中找到与这个字符串的长度相差1的或者相等的。

然后匹配,如果匹配的结果相差一个则输出

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <string>
 4 #include <iostream>
 5 #include <stdlib.h>
 6
 7 using namespace std;
 8
 9 string str[10005],str1[10005];
10
11 int main()
12 {
13     int dic=0,need=0;
14     while(cin>>str[dic]){
15         if(str[dic]=="#") break;
16         dic++;
17     }
18     while(cin>>str1[need]){
19         if(str1[need]=="#") break;
20         need++;
21     }
22     //qsort(str,dic,sizeof(str[0]),cmp);  //没用的,最开始我是以为要对字典排序输出,其实并不用
23     for(int i=0;i<need;i++){
24         int flog=0;    //标记,如果找得到相同的字符串,则continue。
25         for(int j=0;j<dic;j++){
26             if(str1[i]==str[j]) {
27                     cout<<str1[i]<<" is correct"<<endl;
28                     flog=1;
29                     break;
30             }
31         }
32         if(flog==1) continue;
33         int len=str1[i].size();
34         cout<<str1[i]<<":";
35         for(int j=0;j<dic;j++){
36             int strl=str[j].size();
37             if(strl==len||strl==len+1||strl==len-1){  //字符串相差1的或者相等的,就用来匹配是否有可能相差一个字符,这是一种减枝的办法。
38                int ans=0;
39                if(len>strl){   //吧那个较长的字符作为被匹配的,用短的来匹配长的字符串。
40                     for(int m=0,d=0;m<len;m++){
41                         if(str1[i][m]==str[j][d]){
42                             ans++;
43                             d++;
44                         }
45                     }
46                 }else if(len<strl){
47                     for(int m=0,d=0;m<strl;m++){
48                         if(str[j][m]==str1[i][d]){
49                             ans++;
50                             d++;
51                         }
52                     }
53                 }else if(len==strl){
54                     for(int m=0,d=0;m<strl;m++,d++)
55                     if(str[j][m]==str1[i][d]) ans++;
56                 }
57                 if(len>=strl&&ans==len-1) cout<<" "<<str[j];
58                 if(len<strl&&ans==len) cout<<" "<<str[j];
59             }
60         }
61         cout<<endl;
62     }
63     return 0;
64 }
时间: 2024-12-19 03:38:41

poj 1035的相关文章

[ACM] POJ 1035 Spell checker (单词查找,删除替换增加任何一个字母)

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18693   Accepted: 6844 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given word

POJ 1035 代码+详细注释

Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19319 Accepted: 7060 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given words us

POJ 1035 代码+具体的目光

Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19319 Accepted: 7060 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given words us

POJ 1035 Spell Check 字符串处理

被这样的题目忽悠了,一开始以为使用Trie会大大加速程序的,没想到,一不小心居然使用Trie会超时. 最后反复试验,加点优化,终于使用Trie是可以过的,不过时间大概难高于1500ms,一不小心就会超时. 看来这是一道专门卡Trie的题目,只好放弃不使用Trie了. 也得出点经验,如果字符串很多,如本题有1万个字符串的,那么还是不要使用Trie吧,否则遍历一次这样的Trie是十分耗时的,2s以上. 于是使用暴力搜索法了,这里的技巧是可以使用优化技术: 1 剪枝:这里直接分组搜索,分组是按照字符串

POJ 1035 Spell checker (串)

题目大意: 问你后面输入的串能不能通过  加减一个字符,或者替换一个字符变成字典中的串. 思路分析: 直接模拟替换加减的过程. 比较两个串的长度.要相差为1 的时候才能进行模拟. 模拟的过程就是进行一个个的匹配. 发现失配的次数小于等于 1就可以输出. #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <string> #i

POJ 1035 Spell checker

题目链接 http://poj.org/problem?id=1035 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24142   Accepted: 8794 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the cor

poj 1035 Spell checker(暴力判断)

题目链接:http://poj.org/problem?id=1035 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given words using a known dictionary of all correct words in all their f

【POJ 1035】Spell checker

题 题意 每个单词,如果字典里存在,输出”该单词 is correct“:如果字典里不存在,但是可以通过删除.添加.替换一个字母得到字典里存在的单词,那就输出“该单词:修正的单词”,并按字典里的顺序输出:如果都不存在,那就输出“单词:”就好... 分析 存下字典单词们和它们的长度,对每个要查找的单词,暴力扫描字典单词,根据单词长度,选择操作并检查. 代码 #include<stdio.h> #include<cstring> char c[17],dictionary[10005]

poj 1035 纯正的字符串水

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22673   Accepted: 8258 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given word