现在,给你一个由字符'D'和'I'构成的加密签名。'D'表示两个数字是递减关系,'I'表示两个数字是递增关系。我们的加密签名是由一个特殊的整数数组生成的。这个数组含有从1到n(n是加密签名的长度加1)的所有数字,并且每个数字只出现一次。举例来说,加密签名"DI"可以有数组[2,1,3]或者[3,1,2]生成,但是不能由数组[3,2,4]或者[2,1,3,4]生成。[3,2,4]和[2,1,3,4]都不能生成"DI"这个特定的加密签名。
找到能够生成输入加密签名的[1, 2, ... n]的最小字典序的排列。
- 输入字符串只含有
'D'
和'I'
。 - 输入字符串的长度是一个正整数,并且长度不会超过
10,000
。
样例
样例 1:
输入: str = "DI"
输出: [2,1,3]
样例 2:
输入: str = "I"
输出: [1,2]
vector<int> findPermutation(string &s)
{
int size = s.size();
vector<int>ret;
for (int i = 1; i <= size+1; i++)
{
ret.push_back(i);
}
int cur = 0;
while (cur < size)
{
if (s[cur] == 'D')
{
int start = cur;
while (cur < size && s[cur] == 'D')
{
cur++;
}
reverse(ret.begin() + start, ret.begin() + cur+1);
}
else
{
cur++;
}
}
return ret;
}