zoukankan      html  css  js  c++  java
  • 有序的组合

    接到一个需求:需要支持用户按拼音搜索信息(好友或是其它装扮之类的),首先有一个对应的文字编码库,用来标出哪些汉字是多音字,然后返回该汉字的首字拼音,比如:你好 –> 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

  • 相关阅读:
    python 数据类型 基础第二天
    Python基础第一篇
    前言、入门程序、常量、变量
    win10打开移动热点让手机连接上网教程
    win10移动热点问题
    博客园快速美化
    Idea提示没有符号类错误解决
    mybatis复习01
    test
    d190305面试题01总结
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/2255422.html
Copyright © 2011-2022 走看看