计算使用给定字符串集可以形成单词的次数

时间:2017-01-14 05:16:36

标签: php algorithm

我试图从给定的小写字母随机字符串中得到形成一个单词的次数。

示例假设我有一个字符串hfgajjvbynajgrty,我想知道我的名字ayan可以从中形成多少次。

我做了一点但是之后我无法想到这样做的逻辑。

$result = [];
$count = 0;
for($i=0; $i<$stringLength; $i++) {
    $count = substr_count($string, $string[$i]);
    $result[$string[$i]] = $count;
}
var_dump($result);

foreach($result as $s => $occurs) {

}

1 个答案:

答案 0 :(得分:0)

这不是很容易,但也不难......

假设您想要生成单词aoData,.push(search_gen);,并且您将获得字符串abc

首先要做的是创建一个数组A,它将包含你想要的单词中出现的字符数(显然是一个长度为26的数组)。

第二件事是创建另一个数组B,它将包含你给出的字符串中字符的发生次数(也是长度26)。

在这个例子中,数组是:

aaabbbbccc

然后运行以下循环:

A: 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B: 3 4 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

您的答案将存储使用B制作A的最大可能次数。

在示例中,答案为3(这是{3,4,3}之间的最小值,显然你会浪费一个int answer = 99999999; for(i = 0; i < 26; i++){ if(A[i] != 0){ answer = min(answer, B[i]/A[i]); } } )。

如果给定字符串为b,则答案为2,这是{2,3,4}之间的最小值。