[leetcode]484.Find Permutation
来源:互联网 发布:agile java pdf 编辑:程序博客网 时间:2024/06/06 20:52
greedy
题目:
By now, you are given a secret signature consisting of character ‘D’ and ‘I’. ‘D’ represents a decreasing relationship between two numbers, ‘I’ represents an increasing relationship between two numbers. And our secret signature was constructed by a special integer array, which contains uniquely all the different number from 1 to n (n is the length of the secret signature plus 1). For example, the secret signature “DI” can be constructed by array [2,1,3] or [3,1,2], but won’t be constructed by array [3,2,4] or [2,1,3,4], which are both illegal constructing special string that can’t represent the “DI” secret signature.
On the other hand, now your job is to find the lexicographically smallest permutation of [1, 2, … n] could refer to the given secret signature in the input.
Example 1:
Input: "I"Output: [1,2]Explanation: [1,2] is the only legal initial spectial string can construct secret signature "I", where the number 1 and 2 construct an increasing relationship.
Example 2:
Input: "DI"Output: [2,1,3]Explanation: Both [2,1,3] and [3,1,2] can construct the secret signature "DI", but since we want to find the one with the smallest lexicographical permutation, you need to output [2,1,3]
Note:
The input string will only contain the character ‘D’ and ‘I’.
The length of input string is a positive integer and will not exceed 10,000
给定一个只包含字符’D’和’I’的字符串s。’D’表示递减,’I’表示递增。根据s构造数字1到n的一个排列,使得排列的字典序最小,并且相邻两数字之间的关系与s中的字符保持一致。
思路:
只有D相邻的两个位置的数需要互换,因此,通过确定D的个数和每段只含有D的字符串的起始位置,就可以确定需要翻转的数组的长度及位置。设D的起始位置是i,且str[i] != D,向下遍历字符串,直到str[j+1] = D,j+1 < str.size(),则D的长度为j-i+1,因此将区间[i+1, j+2]的数翻转。
代码:
vector<int> find(string str) { int size = str.size(); vector<int> res(size+1); int i, j, k; for (i = 0; i < size; i++) { if (str[i] == 'D') { j = i; while(str[j] == 'D' && j < size) j++; reverse(res.begin()+i+1, res.begin()+j+2); i = j; } } return res;}
- leetcode 484. Find Permutation
- [leetcode]484.Find Permutation
- [Leetcode] 484. Find Permutation 解题报告
- 484. Find Permutation
- LeetCode Permutation
- [LeetCode] Permutation
- LeetCode-Permutation
- Leetcode--Permutation
- Permutation--LeetCode
- leetcode permutation
- *LeetCode-Permutation
- LeetCode之Permutation、Permutation II
- leetcode -- Permutation & Permutation II--重点
- [leetcode]31. Next Permutation -Find next greater number with same set of digits
- LeetCode: Next Permutation
- LeetCode: Permutation Sequence
- LeetCode Next Permutation
- LeetCode Permutation Sequence
- 逻辑卷管理
- EasyEDA 入坑
- 深度学习
- virtalbox Linux ubntu centos随笔
- android 开发坑点记录
- [leetcode]484.Find Permutation
- 4.jupyter的常用操作(下)
- sql笔记
- EventBus基本使用
- mysql_old_wrong
- 知识付费工具:智果内容付费系统是什么?
- 文本框限制只能输入数字并添加千位分隔符
- MindManager之人大附中学习法则
- 我的第一棵平衡树-SB树