2017-04-17 86 views
0

我的問題聽起來可能是noob,但它在這裏。將一組字符作爲一個單元計數的字符串排列

我從用戶那裏輸入「Karim @ 123」。我希望我的程序創建給定輸入的排列,將「Karim」,「@」和「123」視爲單個單元。因此輸出將類似於「karim123 @」,「@ karim123」,「@ 123karim」 「123 @卡里姆」, 「123karim @」。請記住,會有3!在這個特殊情況下的排列。我正在使用php函數,但該函數告訴我「karim @ 123」的所有排列不是我想要的。功能如下。

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 to swap the char at pos $i and $j of $str. 
function swap(&$str,$i,$j) { 
    $temp = $str[$i]; 
    $str[$i] = $str[$j]; 
    $str[$j] = $temp; 
} 
$str = "hey"; 
permute($str,0,strlen($str)); 

PS:我對編程和算法很陌生。

PPS:請在downvoting之前指定原因。

+0

爲什麼你只能像'Karim','@'和'123'這樣的字符串只有3個分區,爲什麼不是4或5或2或'k'分區? – vish4071

+0

它是否將字符串分組在一起,包括所有字母字符,所有特殊字符和所有數字在一起?確切地說, – vish4071

+0

。此外,輸入字符串的模式將是這樣的。 「單詞」+「特殊字符」+「數字」。 –

回答

1

假設你把字符串的方式是,你包括所有字母字符一起,所有的特殊字符在一起,所有的數字加在一起,你可以創建一個地圖像這樣上面的例子:

A => Karim 
B => @ 
C => 123 

然後創建所有「ABC」的排列,其將爲:

ABC, ACB, BAC, BCA, CAB, CBA 

並用來自地圖的相應值替換。

+0

這在一定程度上解決了我的問題。 –

+0

「某種程度上」?你有其他疑問/問題?隨意問,我會盡我所能幫助。 – vish4071

+1

不需要隊友:)。現在問題完全解決了。 –

相關問題