如何获得以信变化阵列上所有类似琴弦 [英] How to get all the similar strings based on an array of letter variations

查看:110
本文介绍了如何获得以信变化阵列上所有类似琴弦的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不断尝试环绕此我的大脑,但我有效试图生成基于信变化的阵列上的特定字符串的所有变化的数组/列表。

我有字符串法比安,我有变化所涉及每个字母的数组。例如,一个是可更换的有4个,我是更换1和L。因此,考虑怎样才能法比安的每一个变化的列表中的信息。

  $变种=阵列();
$变种['一'] =阵列('4');
$变体的i] =阵列('1','L');$字符串='法比安';$结果= getVariants('法比安',$变种);的print_r($结果);//输出示例:
阵列([0] =>法比安[1] => f4bien [2] => fab1en [3] => fablen [4] => f4b1en [5] => f4blen)


解决方案

您的情况下,可以很容易地实现递归。这将是这样的:

 函数getVariants($字符串,$变种)
{
    //这里是关于从字符串的右剥1象征,所以
    //可能是你preFER用字符串函数的工作:
    $字符串= is_array($字符串)$字符串:str_split($字符串);
    $符号= array_pop($字符串);
    $变种= array_key_exists($符号,$变种)?
               array_merge([$符号],$变种[$符号):
               [$符号];
    $结果= [];
    如果(!计数($字符串))
    {
        返回$变体;
    }
    的foreach(getVariants($字符串,$变种)为$片)
    {
        的foreach($变种为char $)
        {
            $结果[] = $ $一片焦炭。
        }
    }
    返回$结果;
}

小提琴演示。这是如何工作?答案是:字符串,长度 N 的变化是它的变化是正确的符号上的部分变化乘以没有那个符号(即长度 N-1 )。通过乘法我的意思的两套Decart产物,然后两部分组成,是在某一对置

I keep trying to wrap my brain around this but I am effectively trying to generate an array/list of all variations of a given string based on an array of letter variations.

I have the string "fabien", and I have an array of variations for each letter involved. For instance A is replaceable with 4, i is replaceable with 1 and l. So given the information how can I generate a list of every variation of "fabien".

$variants = array();
$variants['a'] = array('4');
$variants['i'] = array('1', 'l');

$string = 'fabien';

$result = getVariants('fabien', $variants);

print_r($results);

// Sample output:
Array ([0] => fabien [1] => f4bien [2] => fab1en [3] => fablen [4] => f4b1en [5] => f4blen)

解决方案

Your case can be easily implemented with recursion. That will be like:

function getVariants($string, $variants)
{
    //here's about stripping 1 symbol from string's right, so 
    //may be you'll prefer to work with string functions:
    $string  = is_array($string)?$string:str_split($string);
    $symbol  = array_pop($string);
    $variant = array_key_exists($symbol, $variants)?
               array_merge([$symbol], $variants[$symbol]):
               [$symbol];
    $result  = [];
    if(!count($string))
    {
        return $variant;
    }
    foreach(getVariants($string, $variants) as $piece)
    {
        foreach($variant as $char)
        {
            $result[] = $piece.$char;
        }
    }
    return $result;
}

-see fiddle demo. How is this working? The answer is: variation of string with length N is variations of it's right symbol 'multiplied' on variations of it's part without that symbol (i.e. with length N-1). By 'multiplication' I mean Decart product of two sets and then concatenation of two parts, that are in certain pair.

这篇关于如何获得以信变化阵列上所有类似琴弦的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆