前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有序的组合

有序的组合

作者头像
meteoric
发布2018-11-16 15:02:59
4550
发布2018-11-16 15:02:59
举报
文章被收录于专栏:游戏杂谈游戏杂谈

接到一个需求:需要支持用户按拼音搜索信息(好友或是其它装扮之类的),首先有一个对应的文字编码库,用来标出哪些汉字是多音字,然后返回该汉字的首字拼音,比如:你好 –> nh,但是对于 “阿是啊”-> asa、esa,有两个可表达出这个意思,为什么?因为“阿”是多音字“e”和“a”。(举的示例可能不是很恰当,只是想表达出一个意思,输入asa或是esa都能匹配出“阿是啊”)。

比如现在输入:“阿胶” 阿对应的就是AE,胶对应的是J,实际可参与匹配的项有两个C12 * C11 = 2。

现在弄点复杂的情况,输入的4个字都是多间字,第一个字对应汉字拼音首字母为“AE”、第二个对应“BD”、第三个对应“CFG”、第四个对应“OPQ”,那么输入有序组合的任意字符,比如ABC,就能匹配上面完整的汉字。写了一个简单的递归,实现上述的需求。

代码语言:javascript
复制
package  
{
    import flash.display.Sprite;
    /**
     * ...
     * @author Meteoric_cry
     */
    public class CombDemo extends Sprite
    {
        
        private var _arr:Array = [
            'AE', 'BD', 'CFG', "OPQ"
        ];
        
        public function CombDemo() 
        {
            inited();
        }
        
        private function inited():void
        {
            for (var i:int = 0, len:int = _arr.length; i < len; i++)
            {
                _arr[i] = String(_arr[i]).split("");
            }
            
            var a:Array = getCombArr(_arr);
            
            trace("共有:" + a.length + "种组合");
            trace(a.join("\n"));
        }
        
        private function getCombArr(arr:Array):Array
        {
            var len:int = arr.length;
            
            if (len >= 2)
            {
                var len_1:int = arr[0].length;
                var len_2:int = arr[1].length;
                
                var tempArr:Array = new Array();
                
                for (var i:int = 0; i < len_1; i++)
                {
                    for (var j:int = 0; j < len_2; j++)
                    {
                        tempArr.push(arr[0][i] + arr[1][j]);
                    }
                }
                
                var newArr:Array = new Array();
                
                for (var m:int = 2; m < len; m++)
                {
                    newArr[m - 1] = arr[m];
                }
                
                newArr[0] = tempArr;
                
                return arguments.callee(newArr);
            }
            else
            {
                return arr[0];
            }
        }
        
    }

}

运行的结果:

共有:36种组合 ABCO ABCP ABCQ ABFO ABFP ABFQ ABGO ABGP ABGQ ADCO ADCP ADCQ ADFO ADFP ADFQ ADGO ADGP ADGQ EBCO EBCP EBCQ EBFO EBFP EBFQ EBGO EBGP EBGQ EDCO EDCP EDCQ EDFO EDFP EDFQ EDGO EDGP EDGQ

只需要对输入的字母,与上述的结果进行indexOf匹配即可知道是否满足要求。

网上有一个专门用于解决数学的向量和矩阵的库Sylvester

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-11-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档