zoukankan      html  css  js  c++  java
  • Spell checker

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

    View Code
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct node
    {
        char str[20];
        int index;
    }ans[10010];
    struct Trie
    {
        Trie *br[26];
        int index;
        void init()
        {
            index=0;
            for(int i=0;i<26;++i)
                br[i]=NULL;
        }
    }*root,tree[150010];
    
    int p;
    void build(char *s,int idx)
    {
        Trie *t=root;
        for(int i=0;s[i];++i)
        {
            int id=s[i]-'a';
            if(!t->br[id])
            {
                tree[++p].init();
                t->br[id]=&tree[p];
            }
            t=t->br[id];
        }
        t->index=idx;
    }
    
    int search(char *s)
    {
        Trie *t=root;
        for(int i=0;s[i];++i)
        {
            int id=s[i]-'a';
            if(!t->br[id])
            return 0;
            t=t->br[id];
        }
        return t->index;
    }
    
    void repla(char *from,char *to,int pos,char c)
    { //替代某个字符
        strcpy(to,from);
        to[pos]=c;
    }
    
    void insert(char *from,char *to,int pos,char c)
    { //插入某个字符
        int len=strlen(from);
        for(int i=0;i<pos;++i)
            to[i]=from[i];
        to[pos]=c;
        for(int i=pos;i<len;++i)
            to[i+1]=from[i];
        to[len+1]='\0';
    }
    
    void delet(char *from,char *to,int pos)
    { //删除某个字符
        int len=strlen(from);
        for(int i=0;i<pos;++i)
            to[i]=from[i];
        for(int i=pos;i<len-1;++i)
            to[i]=from[i+1];
        to[len-1]='\0';
    }
    
    int cmp(const node &a,const node &b)
    {
        return a.index<b.index;
    }
    
    int main()
    {
    
        tree[0].init();
        root=&tree[0];
        char str[20],temp[20];
        int idx=1;
        while(scanf("%s",str),str[0]!='#')
        {
            build(str,idx++);
        }
        while(scanf("%s",str),str[0]!='#')
        {
            if(search(str))
            printf("%s is correct\n",str);
            else
            {
                int len=strlen(str);
                int x,cnt=0;
                for(int i=0;i<len;++i)
                {
                    delet(str,temp,i);
                    if((x=search(temp))!=0)
                    {
                        strcpy(ans[cnt].str,temp);
                        ans[cnt++].index=x;
                    }
                    for(int j=0;j<26;++j)
                    {
                        repla(str,temp,i,j+'a');
                        if((x=search(temp))!=0)
                        {
                            strcpy(ans[cnt].str,temp);
                            ans[cnt++].index=x;
                        }
                        insert(str,temp,i,j+'a');
                        if((x=search(temp))!=0)
                        {
                            strcpy(ans[cnt].str,temp);
                            ans[cnt++].index=x;
                        }
                    }
                }
                for(int i=0;i<26;++i)
                {
                    insert(str,temp,len,i+'a');
                    if((x=search(temp))!=0)
                    {
                        strcpy(ans[cnt].str,temp);
                        ans[cnt++].index=x;
                    }
                }
                sort(ans,ans+cnt,cmp);
                printf("%s:",str);
                if(cnt)
                printf(" %s",ans[0].str);
                for(int i=1;i<cnt;++i)
                if(ans[i].index!=ans[i-1].index)
                printf(" %s",ans[i].str);
                printf("\n") ;
            }
        }
        return 0;
    }
  • 相关阅读:
    HAProxy、Keepalived 在 Ocatvia 的应用实现与分析
    Octavia 的 HTTPS 与自建、签发 CA 证书
    Octavia 创建 loadbalancer 的实现与分析
    OpenStack Rally 质量评估与自动化测试利器
    自建 CA 中心并签发 CA 证书
    Failed building wheel for netifaces
    通过 vSphere WS API 获取 vCenter Datastore Provisioned Space 置备空间
    OpenStack Placement Project
    我们建了一个 Golang 硬核技术交流群(内含视频福利)
    没有图形界面的软件有什么用?
  • 原文地址:https://www.cnblogs.com/yelan/p/2994214.html
Copyright © 2011-2022 走看看