poj 1035 Spell checker

原创 2012年03月24日 19:57:54

很简单的1a了,代码也很好写。思路也很简单,直接暴力就是了,数据很弱因为。没有任何优化,391ms。

/*
POJ: 1035 Spell checker
*/

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <cmath>

using namespace std;

vector<string> vec;
vector<string> res;

bool compare(string str1, string str2)
{
    int i = 0, j = 0;
    int diff = 0;
    while(i < str1.size() && j < str2.size()) {
        if(str1[i] == str2[j]) {
            i++;
            j++;
        }
        else if(diff == 0) {
            i++;
            diff++;
        } 
        else if(diff > 0) {
            diff++;
            break;
        }
    }
    if(diff <= 1)
        return true;
    return false;
}

bool canReplace(string str1, string str2)
{
    int diff = 0;   
    
    for(int i = 0; i < str1.size(); i++) {
        if(str1[i] != str2[i])
            diff++;
        if(diff > 1)
            break;
    }
    
    if(diff > 1)
        return false;
    return true;
}

int main()
{
    string str;
    
    //freopen("data.in", "rb", stdin);
    vec.clear();
    while(cin >> str, str != "#") {
        vec.push_back(str);
    }

    while(cin >> str, str != "#") {
        res.clear();
        bool flag = false;
        cout << str;
        for(vector<string>::iterator it = vec.begin(); it != vec.end(); it++) {
            if(abs((int)str.size() - (int)(*it).size()) == 1) {
                if(str.size() > (*it).size()) {
                    if(compare(str, *it))
                        res.push_back(*it);
                }
                else if(compare(*it, str))
                    res.push_back(*it);
            }
            else if(str.size() == (*it).size()) {
                if(*it == str) {
                    flag = true;
                    printf(" is correct\n");
                    break;
                }
                else if(canReplace(str, *it))
                    res.push_back(*it);
            }
        }
        if(!flag) {
            vector<string>::iterator it = res.begin();
            cout << ":";
            while(it != res.end()) {
                cout << " " << *it;
                it++;
            }
            cout << endl;
        }
    }
    
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ1035-Spell checker

POJ 1035 Spell checker 如何写代码的思考

POJ 1035 Spell checker 如何写代码的思考

POJ 1035 Spell checker 字符串

#include using namespace std; string dic[10010]; string che[60]; int dc, cc, flag; void setF...
  • Tsaid
  • Tsaid
  • 2011-07-20 16:59
  • 302

poj 1035 Spell checker

先给一个词典然后给单词,错的单词通过改、增、删一个字母,输出正确的单词#include #include char word[10010][20],s[20]; int ha(int i,char *...

poj 1035 Spell checker trie树+快排

很恶心的一道题。。。 思想很简单的,就是找一个单词是否在字典中出现过,出现了则按题意输出。如果没出现,则在某个位置插入或删除或替代某个字符,然后判断在字典中是否出现。 我用的字典树,还没用STL里...

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

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18693   ...

POJ 1035 Spell checker(哈希表)

/* 题意:输入字典,然后输入单词,判断字典中是否出现过该单词,或者是否进行删除、添加、替换操作,如果是,则输出对应的字典中的单词 要求按照输入时候的排名输出 题解:建立两个哈希表。一个存储字典和输...

POJ 1035:Spell checker

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22574   ...

poj 1035 Spell checker(暴力判断)

poj 1035 Spell checker(暴力判断)

字符串 模拟 Spell checker (poj 1035)

给出一个字典,再给出若干单词,根据字典判断单词的正确性,若正确输出correct,若错误且它能够通过插入一个字母,删除一个字母,替换一个字母使它正确,输出更改后的单词,并按照给出字典的字典序输出。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)