在網上看到了乙個操作字串的題目,該題為:字串排列。大概意思是列出字串中所有字元的所有組合並且輸出無重複。自己做了一下,這裡分享該題的思路,和做法。(自我覺得實現的有些麻煩)。歡迎指點。
問題
輸入乙個字串,列印出該字串中字元的所有排列。
輸入:
字串abc。
輸出:
列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
思路
字串abc的所有排列存在三種情況:
1、以a開始,再連線bc的所有排列;
2、以b開始,再連線ac的所有排列;
3、以c開始,在連線ab的所有情況。
然後在計算長度為2的字串的所有排列,方法如上。所以採用遞迴的方式,遞迴直至字串長度為2時。當長度為2時,字串的排列一種為字串正序,另一種為字串的反序。長度為4或以上的也是如此。
// 如果引數長度為1 那麼所有的排列就是自身
if (str.length() == 1)
// 如果引數長度為2就呼叫基準情況(遞迴終止條件)
if (str.length() == 2)
for (int i = 0; i < str.length(); i++)
} }// 去除重複的排列
arraylistaa = new arraylist<>();
for (int i = 0; i < result.size(); i++)
} return aa;
}/**
* 遞迴的基準情況。
* * @param str
* 引數長度為2
* @return 長度為2的字串的所有可能排列,即自身和反序
*/public static arraylistpermutation2(string str) else
return result;
}
字串排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。第一種方法 字串拼接 function permutate str else return result console.log pe...
字串全排列
依次選出每乙個字元元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素的全排列。以對字串abc進行全排列為例,我們可以這麼做 固定a,求後面bc的排列 abc,acb,求好後,a和b交換,得到bac 固定b,求後面ac的排列 bac,bca,求好後,c放到第一位置,...
字串全排列
如果沒有重複字元 include using namespace std void swap char char void permutation char char int main void swap char a,char b str 整個串 pbegin 後面的字串拉到前面的起始位置 voi...