zoukankan      html  css  js  c++  java
  • pku 1035 Spell checker

    额,这题,我好想看到分类说是用trie树,可是怎么想也没什么思路,就用了暴力了

    若找不到相同的单词,则相似的也只有三种情况

    代码很好理解

    #include<iostream>
    using namespace std;
    #define MAXN 10001
    char str[MAXN][20];
    bool replace(char *a,char *b)
    {
    	int l1=strlen(a);
    	int l2=strlen(b);
    	if(l1==l2)//修改一个字符
    	{
    		int i=0;
    		while(i<l1&&a[i]==b[i])//找到第一个不同的字符的位置
    			i++;
    		while(++i<l1)//看之后的字符是否相同
    		{
    			if(a[i]!=b[i])
    				return false;
    		}
    	}
    	else if(l1==l2+1)//添加一个字符的
    	{
    		int i=0;
    		while(i<l2&&a[i]==b[i])
    			i++;
    		while(++i<l1)//a跳过一个字符与b比较
    		{
    			if(a[i]!=b[i-1])
    				return false;
    		}
    	}
    	else if(l1+1==l2)//删除一个字符,下面类似
    	{
    		int i=0;
    		while(i<l1&&a[i]==b[i])
    			i++;
    		while(i++<l2)
    		{
    			if(a[i-1]!=b[i])
    				return false ;
    		}
    	}
    	else return false;
    	return true;
    }
    int main()
    {
    	int i=0;
    	bool flag;
    	char c[20];
    	while(scanf("%s",str[i++])!=EOF&&strcmp(str[i-1],"#")!=0);
    	i--;
    	while(scanf("%s",c)!=EOF && strcmp(c,"#")!=0)
    	{
    		flag=false;
    		for(int j=0;j<i;j++)
    			if(strcmp(str[j],c)==0)
    			{
    				flag=true;
    				break;
    			}
    		if(flag)
    			printf("%s is correct\n",c);
    		else 
    		{
    			printf("%s:",c);
    			for(int j=0;j<i;j++)
    			{
    				if(replace(str[j],c))
    					printf(" %s",str[j]);
    			}
    		printf("\n");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    第22课对象的销毁
    第21课对象的构造顺序
    第20课 初始化列表的使用
    第19课构造函数(下)
    第18课构造函数(中)
    第17课构造函数(上)
    第16课类的真正形态
    调试环境的搭建
    Hello,DTOS!(下)
    Hello,DTOS!(中)
  • 原文地址:https://www.cnblogs.com/nanke/p/2047082.html
Copyright © 2011-2022 走看看