如果本文对您有帮助,请点个星!先看列表效果:再看和弦长字符串:在线演示地址:http://laosep.top/pinyin-match/接下来说说微信的拼音匹配规则的实现。参照微信,分为两种。大小写,一个不包含和弦字符,一个包含,我们先从简单的说起。1、不包含多音字,以“nizhenhao”为例打匹配:完整的拼音输入√(当然只输入zhenhao/hao也可以)拼音首字母√尾音不完整√(打字打到一半)无法匹配:首字母不是分词点x(z)henhao,有的用缩写,有的用全字母xniz(hen)hao2。包含复音字符以“骑马(qimajima)”为例直接套用非复音字符的规则总结在OK匹配规则中。首字母必须是拼音分词点,最后一个字除外,不允许。按顺序输入一半的和弦字符)只要列出对应的和弦字符,套用上面的规则,然后用JS实现一个匹配库pinyin-match.js步骤:对输入的拼音进行切分,将中文转拼音匹配结果第一步用第二步的拼音进行分词,返回是否命中。1、拼音分词需要检查输入拼音的有效性,进行分词处理。这一步是匹配算法效率的关键。首先举个例子:搜索时,输入“济南”可以匹配到哪些读音词?jinan(如:Jinan)jinan(如:Jin'an)此外,输入不完整还应考虑jinan(g)(如:JiNang)jinan(g)(如:JinAng)jinan(eng)(如:Jinaneng)jinan(a)(如:Jinana)...有很多很多很多很多很多很多很多很多很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,很多,many等等。但是因为i开头没有拼音,所以这里没有)根据循序渐进的原则,我们先解决拼音输入完整的情况,即,前两个。这里的核心算法其实就是word-break,先附上leetcode链接WordBreakII解决word-break的问题word-break如下:给定一个字符串s和一个单词字典dict,求s根据dictall可能的。示例:lets='catsanddog'constdict=['cat','cats','and','sand','dog']wordBreak(s)//return['catsanddog','catsanddog']先用一张图来说明思路:总结一下这个算法:从第一个字符p开始,检查它是否在字典中。字典中没有,字符p+1,重新查找;如果在词典中,则记录命中词,如果还有剩余字符串则做2,对剩余字符串重复1;如果没有剩余字符串,则完成当前搜索,找到的命中词可以组成一个完整的句子。回到上一个成功的状态,字符p+1继续1。退出条件是将整个字符串丢入字典(即字符p++++++++1,直到结束)。代码实现:functionwordBreak(s){letresult=[]//当前处理letsolutions=[]//保存完整结果getAllSolutions(0,s,result,solutions)returnsolutions}functiongetAllSolutions(start,s,result,solutions){if(start===s.length){//后续没有s,即找到命中结果,存为solutionssolutions.push(result.join(''))return}for(leti=start;i
