首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无重复的aabb置换

无重复的aabb置换
EN

Stack Overflow用户
提问于 2022-09-22 09:28:39
回答 1查看 33关注 0票数 0

日安!

我试图排列这个字符串"aabb",如果我使用"abcd“,结果是正确的,没有重复,但如果我使用"aabb”作为我的字符串,我得到一个不正确的结果。

这应该是结果

代码语言:javascript
复制
['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']

但我得到的结果却是重复的

代码语言:javascript
复制
[aabb aabb abab abba abba abab aabb aabb abab abba abba abab baab baba baab baba bbaa bbaa baba baab bbaa bbaa baba baab]

这是我的Php代码供您检查。

代码语言:javascript
复制
<?php
function permute($str, $l, $r) 
{ 
    if ($l == $r) 
        echo $str. "\n"; 
    else
    { 
        for ($i = $l; $i <= $r; $i++) 
        { 
            $str = swap($str, $l, $i); 
            permute($str, $l + 1, $r); 
            $str = swap($str, $l, $i); 
        }

    } 
} 

function swap($a, $i, $j) 
{ 
    $temp; 
    $charArray = str_split($a); 
    $temp = $charArray[$i] ; 
    $charArray[$i] = $charArray[$j]; 
    $charArray[$j] = $temp; 
    return implode($charArray); 
} 
  
$str = "aabb"; 
$n = strlen($str); 
permute($str, 0, $n - 1); 
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-22 10:13:44

在回送之前,您必须记住并检查是否存在。

代码语言:javascript
复制
function permute_unique($str, $l = null, $r = null, &$memory = [])
{
    if ($r === null) {
        $l = 0;
        $r = strlen($str) - 1;
    }
    if ($l == $r) {
        // echo $str. "\n";
        if (!in_array($str, $memory)) {
            $memory[] = $str;
        }

    } else {
        for ($i = $l; $i <= $r; $i++) {
            $str = swap($str, $l, $i);
            permute_unique($str, $l + 1, $r, $memory);
            $str = swap($str, $l, $i);
        }

    }
    return $memory;
}

function swap($a, $i, $j)
{
    $charArray = str_split($a);
    $temp = $charArray[$i];
    $charArray[$i] = $charArray[$j];
    $charArray[$j] = $temp;
    return implode($charArray);
}

$str = "aabb";
print_r(permute_unique($str));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73812301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档