有序的组合

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

程序员:天冷了,今天穿件衬衫上班!

不说了,小编已经感冒了,赶紧穿上我最爱的格子衬衫!降温了,大家千万要注意别感冒了。另外,别忘了穿上格子衬衫去上班吧!

24020
来自专栏Forrest随想录

我是一个什么风格的管理者?

昨天一口气看了好几篇刘建国老师,在极客时间《技术管理实战36讲》的文章,看地非常过瘾。

83730
来自专栏本立2道生

电脑护眼设置:蓝色光波过滤

本人高度近视,因此平时使用电脑时总会关注如何护眼,安卓手机上使用了app “蓝色光波过滤”,感觉不错,就想看看PC上有没有相应的软件,找倒是找到了,不过需要先安...

12810
来自专栏凌帅的阅读思考与实践

加密货币必将成为世界货币称霸全球(二)

[第一篇文章](https://mp.weixin.qq.com/s/8-FskjZJFRJPd4oFl4BAww)中,凌帅分析了加密货币本身的先进性及作为全球...

17120
来自专栏Modeng的专栏

思考:如何高效的说服别人

国庆期间去一个同学那里去玩耍,因为他是做服务行业的所以国庆没有放假,所以我就只能一边看他做生意,一边等他清闲了聊上两句。

9710
来自专栏日知录

跃迁:成为高手的技术

14420
来自专栏一直在跳坑然后爬坑

行观点与列观点

8310
来自专栏web前端

Button按钮--inject与provide

inject 和 provider 是vue中的组合选项,需要一起使用。目的是允许一个祖先组件向其所有子孙后代注入依赖(简单地说就是祖先组件向子孙后代传值的一种...

28510
来自专栏牛客网

分享经验热乎乎的秋招第一个产品offer去哪儿网

我是之前在校招投了去哪儿的产品经理,6号在宣讲会第一站点进行了线上笔试,当晚接到了通知第二天下午进行面试,精神抖擞,刷了一遍简历了解了一遍OTA就上阵了

15120
来自专栏轮子工厂

简历修改了100遍,却仍然没有找到满意的工作,你可能需要看一下这篇文章

最近恰逢秋招,身边很多朋友都跟我抱怨说,简历投出去了不少,可是很多都是石沉大海,没有了回音。于是就急的不行,纷纷跑过来请教简历制作大法。

12820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励