问题描述
问题是这样的,我有一个字符串叫zainaer,我要从里面匹配出最适合的一项,是根据某个规则来的,比如zainaer匹配出来的适合项是[zai,ai,za,na,er],我要怎么让他智能匹配出zainaer呢?而且这个方法每次传进去的值不同,比如传的是xiaocang,匹配出来的适合项就是[xi,ao,xiao,ca,can,cang,ang],想了半天没想出来特意来问问大家
解决方案
解决方案二:
不知道你什么逻辑
解决方案三:
比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。
解决方案四:
今早失败-->尽早失败
解决方案五:
没见过“复杂”的递归算法。递归和“复杂”扯不上关系。恰恰相反,递归把复杂的问题解决得极其简单。
解决方案六:
引用2楼sp1234的回复:
比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。
分析的很到位
解决方案七:
引用2楼sp1234的回复:
比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。
我现在的算法是,先匹配出适合字符串头的,就是zainaer,先把za,zai匹配出来,然后字符串抹掉这个头,剩下的再按这个道理匹配,直到匹配出正确的为止
解决方案八:
经典递归算法privatevoidbtn_Get_Click(objectsender,EventArgse){intP_int_temp;//定义整型变量if(int.TryParse(txt_value.Text,outP_int_temp))//为变量赋值{lb_result.Text=//输出计算结果"计算结果为:"+Get(P_int_temp).ToString();}else{MessageBox.Show(//提示输入正确数值"请输入正确的数值!","提示!");}}//递归算法//<paramname="i">参与计算的数值</param>//<returns>计算结果</returns>intGet(inti){if(i<=0)//判断数值是否小于0return0;//返回数值0elseif(i>=0&&i<=2)//判断位数是否大于等于0并且小于等于2return1;//返回数值1else//如果不满足上述条件执行下面语句returnGet(i-1)+Get(i-2);//返回指定位数前两位数的和}
解决方案九:
这个不是有个算法名称???求出最长子串····网上找下,已经有很多这样的算法!
解决方案十:
匹配最长的就好了啊,有长的为什么要匹配短的?就是zainaer,先把za,zai匹配出来->根本不合理匹配了za,后面的i根本无法再匹配,你匹配它干嘛.如果我就是想输入za和i分开,需要加引号标明.
解决方案十一:
xian就是先xi'an才是西安有长的不匹配短的.就是这么简单.
解决方案十二:
这个是要做类似分词效果?
解决方案十三:
参考算法“朴素贝叶斯分析”,这个应该是最符合描述的算法当然简单点做,你也可以采用最大公共字串或者最小编辑距离去做