Код оригинал от this thread.Исключить некоторые перестановки строки
Как исключить некоторые перестановки? Например, если я устанавливаю $ str на «heyy» и хочу, чтобы он исключил все перестановки, в которых есть «yy» (два y вместе), как я мог это сделать?
Таким образом, печатается, например, «hyey», но не «hyye».
mb_internal_encoding('UTF-8');
// function to generate and print all N! permutations of $str. (N = strlen($str)).
function permute($str,$i,$n)
{
if ($i == $n)
{
print "$str\n";
}
else
{
for ($j = $i; $j < $n; $j++)
{
swap($str,$i,$j);
permute($str, $i+1, $n);
swap($str,$i,$j); // backtrack.
}
}
}
function swap(&$str,$i,$j) {
$chars = array();
for ($p = 0; $p < mb_strlen($str); $p++) {
$chars[] = mb_substr($str, $p, 1);
}
$temp = $chars[$i];
$chars[$i] = $chars[$j];
$chars[$j] = $temp;
$str = implode($chars);
}
$str = "heyy";
permute($str, 0, mb_strlen($str)); // call the function.
Заранее благодарен!
реализация будет в значительной степени зависеть от пути вы определяете исключения. Будет ли это список запрещенных строк, регулярных выражений или более сложных правил. Затем вы можете применять исключения при создании или после вычисления перестановок. – ptrk
Каким будет оптимальный способ? Я думал просто делать if-statement где-то и иметь список комбинаций букв, чтобы просто пропустить, но не знаю, как это сделать, или если это возможно. – indiqa