LeetCode刷题实战484:寻找排列
示例
示例 1:
输入: "I"
输出: [1,2]
解释: [1,2] 是唯一合法的可以生成秘密签名 "I" 的特定串,数字 1 和 2 构成递增关系。
示例 2:
输入: "DI"
输出: [2,1,3]
解释: [2,1,3] 和 [3,1,2] 可以生成秘密签名 "DI",
但是由于我们要找字典序最小的排列,因此你需要输出 [2,1,3]。
注:
输出字符串只会包含字符 'D' 和 'I'。
输入字符串的长度是一个正整数且不会超过 10,000。
解题
class Solution {
public:
vector<int> findPermutation(string s) {
vector<int> res(s.size()+1);//定义数组
//对数组进行赋值
for(int i=0;ires[i]=i+1;
}
int pos=0;
//遍历字符串
while(posif(s[pos]=='I'){//因为数组已经是升序的
++pos;
continue;
}
int cur_start=pos;//需要降序的起始位置
//找出需要降序的终止位置
while(pos'D'){
++pos;
}
//将该范围内的数进行反序,实现降序
reverse(res.begin()+cur_start,res.begin()+pos+1);
}
return res;
}
};
