zoukankan      html  css  js  c++  java
  • Spell checker(poj 1035)

    题意:

        此题是一个字符串的问题,首先要给出一个字典,里面存储了数个单词。而后,给出一个单词,如果字典中存在,那么就输出correct,如果字典中没有,那么就要判断是不是这个单词有错误,错误有3种,第一种是单词种的一个字母写错了,就是和字典中的单词来说只有一个字母不同,第二种是单词多了一个字母,如果去掉该字母,则和字典中的某单词一致。第三种是单词少一个字母,如果添加上该字母,则和字典中的某单词一致。目的是输出这几种错误所对应的字典中的单词。
     
    暴力求解超时!!!
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define M 10010
    #define N 15
    using namespace std;
    char ch[M][N],s[N];
    int a[M];
    int search(char *a,char *b)
    {
        int lena=strlen(a);
        int lenb=strlen(b);
        if(lena==lenb)
        {
            int flag=0;
            for(int i=0;i<lena;i++)
              if(a[i]!=b[i])
                if(!flag) flag=1;
                else return 0;
            if(flag==1)return 1;
        }
        if(lena==lenb+1)
        {
            int pa=0,pb=0,flag=0;
            while(1)
            {
                if(pa>=lena&&pb>=lenb)break;
                if(a[pa]==b[pb])
                {
                    pa++;
                    pb++;
                }
                else
                  if(!flag)
                  {
                      flag=1;
                      pa++;
                  }
                  else return 0;
            }
            if(flag==1)return 1;
        }
        if(lena==lenb-1)
        {
            int pa=0,pb=0,flag=0;
            while(1)
            {
                if(pa>=lena&&pb>=lenb)break;
                if(a[pa]==b[pb])
                {
                    pa++;
                    pb++;
                }
                else
                  if(!flag)
                  {
                      flag=1;
                      pb++;
                  }
                  else return 0;
            }
            if(flag==1)return 1;
        }
        return 0;
    }
    int main()
    {
        int n=0;
        while(1)
        {
            scanf("%s",ch[++n]);
            if(ch[n][0]=='#')
            {
                n--;
                break;
            }
        }
        while(1)
        {
            int flag=0,cnt=0;
            scanf("%s",s);
            if(s[0]=='#')break;
            printf("%s",s);
            for(int i=1;i<=n;i++)
            {
                if(strcmp(s,ch[i])==0)
                {
                    printf(" is correct
    ");
                    flag=1;
                    break;
                }
                else if(search(s,ch[i]))
                  a[++cnt]=i;
            }
            if(!flag)
            {
                printf(":");
                for(int i=1;i<=cnt;i++)
                  printf(" %s",ch[a[i]]);
                printf("
    ");
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    linux系统中只删除所有文件或只删除所有目录
    redhat7使用nmtui配置网络
    xshell,winscp,xftp无法用root用户登录
    windows无法访问指定设备路径或文件,你可能没有权限
    挂起/释放执行sap Job
    ALE,RFC和CPIC之间的关系
    CALL RFC synchronize and asychronize Examples
    关于BAPI
    ABAP调用SAP的单位转换函数进行单位转换
    BASIS--Client 锁定和解锁
  • 原文地址:https://www.cnblogs.com/harden/p/5620508.html
Copyright © 2011-2022 走看看