基于字符集的固定长度的所有字符串组合

Posted

技术标签:

【中文标题】基于字符集的固定长度的所有字符串组合【英文标题】:all string combinations in a fixed length, based on a charset 【发布时间】:2011-12-13 09:48:11 【问题描述】:

我正在寻找一个函数,该函数将使用字符集返回给定字符串长度内的所有可能字符串。

例如,“abc”字符集和长度为 2 的字符集应允许 9 (3 ^ 2) 个唯一组合:

啊, ab, 交流, 巴, bb, 公元前, 约, CB, 抄送

(手动构建列表)

可以用什么方法来创建这样的函数?

【问题讨论】:

这是作业还是面试题?如果是,请相应地标记它。我们很乐意为您提供帮助,但请帮助我们了解您提出问题的原因。谢谢。 @bryc 像 ac 和 ca 这样的组合可以跳过吗?也就是说,只有独特的组合? @hakre 提问者寻求的不是排列 【参考方案1】:

与往常一样,有多种方法可以解决您的要求,这只是一种方法,在输出字符串中每个字符使用一个计数器:

$c = "abc"; // charset
$l = 2; // string length

for($t='',$cl=strlen($c),$s=array_fill(0,$l,0),$i=pow($cl,$l);$a=0,$i--;) 
    for($t&&$t.=', ';$a<$l;$t.=$c[$s[$a++]]);
    for(;$a--&&++$s[$a]==$cl;$s[$a]=0);
;

echo $t; // the string you asked for.

aa、ab、ac、ba、bb、bc、ca、cb、cc

一个主循环,一个构建字符串的循环和一个向上计数的循环。

我可以想象这也应该适用于为输出字符串的每个位置获取模数。

【讨论】:

你好,我赞成你的回答,因为它很短,很适合我的需要。但是,它太短了,我无法更改它,所以我将它变成一个函数,然后每次调用返回一个字符串,而不是一次返回所有可能性。你能帮我吗?或指导我,这样我就可以做到?谢谢【参考方案2】:

您已经确实这样做了,我们可以从您的示例解决方案中清楚地看到:

aa、ab、ac、ba、bb、bc、ca、cb、cc

您是怎么想出这个解决方案的?您必须牢记以下几点:

    我应该从 charset 开始的 char 是什么?

    在构造输出字符串时,charset 中的 next 字符是什么?

    我可以从 charset 中选择多少个字符?

    当我从 charset 中选择了所有允许的字符后,我必须做什么?

    相对于可以开始使用的字符,我是否已经用尽了字符集?如果是,我就完了。

你能把它翻译成代码吗?还是这个答案太可爱了?

【讨论】:

我想你是对的,但我在将其翻译成代码时不知所措——即如何设置循环、迭代字符集等。 @bryc:我添加了一些代码,参见my answer。

以上是关于基于字符集的固定长度的所有字符串组合的主要内容,如果未能解决你的问题,请参考以下文章

js产生一个随机的字符串数字组合

剑指offer-拓展训练-字符的所有组合-全组合

从给定字符串中查找长度为 k 的所有排列/组合

pandas筛选dataframe数据:指定字符串数据列的长度超过某一固定阈值的所有数据行

字符串中字符的所有组合(组合中的先后顺序不考虑)

字符串中字符的所有组合(组合中的先后顺序不考虑)