zoukankan      html  css  js  c++  java
  • poj1035

    #include <string>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    struct treenode
    {
     bool color;
     int num;
     treenode *next[26];
     treenode()
     {
      color=false;
      memset(next,NULL,sizeof(next));
     }
    };
    struct ansers
    {
     int num;
     string strs;
    };
    treenode tri[200001];
    bool cmp(ansers a,ansers b)
    {
     if(a.num>b.num)
      return false;
     else
      return true;
    }
    void finds(treenode *root,string str)
    {
     ansers anser[20001];
     int ii=0,i,j,k;string str1;
     treenode *p=root;
     for(i=0;i<str.length();i++)
     {
      int data=str[i]-'a';
      if(p->next[data]!=NULL)
       p=p->next[data];
      else
       break;
     }
     if(p->color==true&&i==str.length())//相等
      cout<<str<<" is correct"<<endl;
     else
     { bool flg=true;
      for (j=0;j<str.length();j++)//字符数相等
      {
       str1=str;
       for(k=0;k<26;k++)
       { 
        str1[j]='a'+k;
        p=root;
        for(i=0;i<str1.length();i++)
        {
         int data=str1[i]-'a';
         if(p->next[data]!=NULL)
          p=p->next[data];
         else
          break;
        }
        if(p->color==true&&i==str1.length())
        {
         anser[ii].strs=str1;
         anser[ii++].num=p->num;
        }

       }
      }  
      for(j=0;j<=str.length();j++)//要查的str少一个字符
      {
       for(k=0;k<26;k++)
       {
        char ss='a'+k;
        str1=str.substr(0,j)+ss+str.substr(j,str.length()-j);
        p=root;
        for(i=0;i<str1.length();i++)
        {
         int data=str1[i]-'a';
         if(p->next[data]!=NULL)
          p=p->next[data];
         else
          break;
        }
        if(p->color==true&&i==str1.length())
        {
         anser[ii].strs=str1;
         anser[ii++].num=p->num;
        }
       }
      }
      if(str.length()>1)
      for(j=0;j<str.length();j++)//要查的str多一个字符
      {
       str1=str.substr(0,j)+str.substr(j+1,str.length()-j);
       p=root;
       for(i=0;i<str1.length();i++)
       {
        int data=str1[i]-'a';
        if(p->next[data]!=NULL)
         p=p->next[data];
        else
         break;
       }
       if(p->color==true&&i==str1.length())
       {
        anser[ii].strs=str1;
        anser[ii++].num=p->num;
       }
      }
      sort(anser,anser+ii,cmp);
      cout<<str<<": ";
      if(ii>1)
      {    
       cout<<anser[0].strs<<' ';
       for(i=1;i<ii;i++)
        if(anser[i-1].strs!=anser[i].strs)
         cout<<anser[i].strs<<' ';
      }
      if(ii==1)
       cout<<anser[0].strs;
      cout<<endl;
     }
    }
    int ss=0,num=0;
    void Insert(treenode *root,string str)
    {
     treenode *p=root;
     for(int i=0;i<str.length();i++)
     {
      int data=str[i]-'a';
      if(p->next[data]==NULL)
       p->next[data]=&tri[++ss];
      p=p->next[data];
     }
     p->color=true;
     p->num=num;
     num++;
    }
    int main()
    {
     string str;char a[15];
     treenode *root=&tri[0];  
     while(scanf("%s",a))
     { 
      str=a;  
      if(str=="#")
       break;
      else
       Insert(root,str);
      
     }
     while(cin>>str&&str!="#")
     {
      finds(root,str);
     }
     return 0;
    }

  • 相关阅读:
    2017年寒假作业(二)
    2017年寒假作业(一)
    JAVA类型转换
    两数之和(LeetCode)
    编程汇总
    赌神(赛码网基础算法题)
    个人作业——软件工程实践总结
    个人作业——软件产品案例分析
    交换队伍交接过程及个人心得
    软件工程结对作业第二次
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2181739.html
Copyright © 2011-2022 走看看