?LeetCode刷題實戰(zhàn)484:尋找排列
示例? ? ? ? ? ? ? ? ? ? ? ? ?
示例 1:
輸入: "I"
輸出: [1,2]
解釋: [1,2] 是唯一合法的可以生成秘密簽名 "I"?的特定串,數(shù)字 1?和 2?構(gòu)成遞增關(guān)系。
示例 2:
輸入: "DI"
輸出: [2,1,3]
解釋: [2,1,3] 和 [3,1,2] 可以生成秘密簽名 "DI",
但是由于我們要找字典序最小的排列,因此你需要輸出 [2,1,3]。
注:
輸出字符串只會包含字符 'D'?和 'I'。
輸入字符串的長度是一個正整數(shù)且不會超過 10,000。
解題
class?Solution?{
public:
????vector<int> findPermutation(string?s) {
????????vector<int> res(s.size()+1);//定義數(shù)組
????????//對數(shù)組進(jìn)行賦值
????????for(int?i=0;i????????????res[i]=i+1;
????????}
????????int?pos=0;
????????//遍歷字符串
????????while(pos????????????if(s[pos]=='I'){//因為數(shù)組已經(jīng)是升序的
????????????????++pos;
????????????????continue;
????????????}
????????????int?cur_start=pos;//需要降序的起始位置
????????????//找出需要降序的終止位置
????????????while(pos'D'){
????????????????++pos;
????????????}
????????????//將該范圍內(nèi)的數(shù)進(jìn)行反序,實現(xiàn)降序
????????????reverse(res.begin()+cur_start,res.begin()+pos+1);
????????}
????????return?res;
????}
};
LeetCode刷題實戰(zhàn)483:最小好進(jìn)制
