POJ 1035 Spell checker 简单字符串匹配

在输入的单词中删除或替换或插入一个字符,看是否在字典中。直接暴力,172ms。。

 1 #include <stdio.h>

 2 #include <string.h>

 3 int len[10000];

 4 char dic[10000][20], s[20];

 5 

 6 bool del(char s1[], char s2[])

 7 {

 8     bool isdel = 0;

 9     for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++)

10     {

11         if(s1[i] != s2[j])

12         {

13             if(isdel)

14                 return 0;

15             j--;

16             isdel = 1;

17         }

18     }

19     return 1;

20 }

21 

22 bool rep(char s1[], char s2[])

23 {

24     bool isrep = 0;

25     for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++)

26     {

27         if(s1[i] != s2[j])

28         {

29             if(isrep)

30                 return 0;

31             isrep = 1;

32         }

33     }

34     return 1;

35 }

36 

37 bool ins(char s1[], char s2[])

38 {

39     bool isins = 0;

40     for(int i = 0, j = 0; s1[i] && s2[j]; i++, j++)

41     {

42         if(s1[i] != s2[j])

43         {

44             if(isins)

45                 return 0;

46             i--;

47             isins = 1;

48         }

49     }

50     return 1;

51 }

52 

53 int main()

54 {

55     int cnt = 0;

56     while(scanf("%s", dic[cnt]) != EOF)

57     {

58         if(dic[cnt][0] == '#')break;

59         len[cnt] = strlen(dic[cnt++]);

60     }

61     while(scanf("%s", s) != EOF)

62     {

63         if(s[0] == '#')break;

64         bool ok = 0;

65         for(int i = 0; i < cnt; i++)

66         {

67             if(strcmp(s, dic[i]) == 0)

68             {

69                 ok = 1;

70                 printf("%s is correct", s);

71             }

72         }

73         if(!ok)

74         {

75             printf("%s:", s);

76             int len_s = strlen(s);

77             for(int i = 0; i < cnt; i++)

78             {

79                 if(len_s - len[i] == 1 && del(s, dic[i]))

80                     printf(" %s", dic[i]);

81                 if(len_s - len[i] == 0 && rep(s, dic[i]))

82                     printf(" %s", dic[i]);

83                 if(len_s - len[i] == -1 && ins(s, dic[i]))

84                     printf(" %s", dic[i]);

85             }

86         }

87         printf("\n");

88     }

89     return 0;

90 }
View Code

 

你可能感兴趣的:(check)