• poj 1035 Spell checker


    http://poj.org/problem?id=1035 题目很简单,就是给一连串的字符串作为标准字符串,然后是输入以些变动的字符串,这个变动的字符串是这样定义的:

    1.可能是随意的删掉了一个字符

    2.可能是随意的加上了一个字符

    3.与标准字符串相比,随意的替换掉了一个字符。

    由于上面的定义都是说的一个,所以题目也就很简单了,只要罗列三种情况就可以,len1(母串)和len2(子串),1.len1==len2,   2.  len1-len2==1   3.  len2-len1==1;

    虽然这样说简单,但是我写的时候也不觉得简单,主要是我对处理字符串不会,老是少考虑情况。好像写的代码也很复杂

      1 #include<stdio.h>
    2 #include<string.h>
    3 #include<iostream>
    4 #include<algorithm>
    5 using namespace std;
    6 struct node
    7 {
    8 int len;
    9 char str[20];
    10 }a[10020];
    11 int cmp(node a,node b)
    12 {
    13 return a.len<b.len;
    14 }
    15 int main()
    16 {
    17 int i,j,k;
    18 i=0;
    19 while(cin>>a[i].str,strcmp(a[i].str,"#"))
    20 {
    21 a[i].len=strlen(a[i].str);
    22 i++;
    23 }
    24 //sort(a,a+i,cmp);
    25 char sbr[20];
    26 cin>>sbr;
    27 while(strcmp(sbr,"#"))
    28 {
    29 int sum,mark=0;
    30 sum=0;
    31 int len1=strlen(sbr);
    32 for(j=0;j<i;j++)
    33 {
    34 if(!strcmp(sbr,a[j].str))
    35 {
    36 mark=1;
    37 cout<<sbr<<" is correct";
    38 break;
    39 }
    40 }
    41 if(!mark)
    42 {for(j=0;j<i;j++)
    43 {
    44 //if(a[j].len-len1>1)break;
    45 sum=0;
    46 if(len1==a[j].len)
    47 {
    48 for(k=0;k<len1;k++)
    49 if(a[j].str[k]!=sbr[k]) sum++;
    50 //if(!sum) {cout<<sbr<<" is correct";mark=1;break;}
    51 if(sum==1)
    52 {
    53 if(!mark)
    54 {
    55 mark=1;
    56 cout<<sbr<<": "<<a[j].str;
    57 }
    58 else cout<<" "<<a[j].str;
    59 }
    60 }
    61 sum=0;
    62 if(len1-a[j].len==1)
    63 {
    64 for(k=0;k<len1;k++)
    65 if(sbr[k]!=a[j].str[k]) break;
    66 for(k=k+1;k<len1;k++)
    67 if(sbr[k]!=a[j].str[k-1]) {sum=1;break;}
    68 if(!sum)
    69 {
    70 if(!mark)
    71 {
    72 mark=1;
    73 cout<<sbr<<": "<<a[j].str;
    74 }
    75 else cout<<" "<<a[j].str;
    76 }
    77 }
    78 if(a[j].len-len1==1)
    79 {
    80 for(k=0;k<a[j].len;k++)
    81 if(sbr[k]!=a[j].str[k]) break;
    82 for(k=k+1;k<a[j].len;k++)
    83 if(sbr[k-1]!=a[j].str[k]){sum=1;break;}
    84 if(!sum)
    85 {
    86 if(!mark)
    87 {
    88 mark=1;
    89 cout<<sbr<<": "<<a[j].str;
    90 }
    91 else cout<<" "<<a[j].str;
    92 }
    93 }
    94 }
    95 }
    96 if(!mark) {cout<<sbr<<":";}
    97 cout<<endl;
    98 cin>>sbr;
    99 }
    100 return 0;
    101 }
  • 相关阅读:
    Load Balancing 折半枚举大法好啊
    Big String 块状数组(或者说平方分割)
    K-th Number 线段树(归并树)+二分查找
    D. Powerful array 莫队算法或者说块状数组 其实都是有点优化的暴力
    CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
    运行时Runtime的API
    UIView的API
    UIControl的API
    UIScrollView的API
    使用KVO键值监听
  • 原文地址:https://www.cnblogs.com/fxh19911107/p/2380907.html
Copyright © 2020-2023  润新知