劍指offer--字串的排列
阿新 • • 發佈:2018-12-13
題目描述
輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
解析
這一題要用到全排列,我直接對原字串進行了全排列,然後再排序去重即可。
1.全排列的原理很簡單,就是每次從陣列中取走一個元素,使用遞迴即可搞定。
2.sort()函式完成了字串排序的功能。
3.unique()函式將相鄰的重複元素都移到了陣列最後,並返回重複陣列段的頭迭代器。
4.erase()函式去掉重複部分即可。
void method(vector<string> &result, string temp,string t ){ if(temp.length()==0)return; for(int i =0;i<temp.length();++i){ string newString = t; newString += temp[i]; string newTemp = temp; newTemp.erase(i,1); method(result, newTemp, newString); if(newTemp.length()==0){ result.push_back(newString); return; } } } vector<string> Permutation(string str) { vector<string> result; string t = ""; method(result, str, t); sort(result.begin(),result.end()); result.erase(unique(result.begin(),result.end()),result.end()); return result; }