题目地址:
https://www.lintcode.com/problem/delete-char/description
给定一个小写英文字母组成的字符串,再给定一个数字 k k k,求其最小字典序的长度为 k k k的子序列。
这个题目的思路与https://blog.csdn.net/qq_46105170/article/details/107829553完全一样,只需要把一个字符串看成是 27 27 27进制的整数即可,然后同样用单调栈来做。代码如下:
public class Solution {
/**
* @param str: the string
* @param k: the length
* @return: the substring with the smallest lexicographic order
*/
public String deleteChar(String str, int k) {
// Write your code here.
if (k == 0) {
return "";
}
k = str.length() - k;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
while (sb.length() > 0 && sb.charAt(sb.length() - 1) > c && k > 0) {
sb.setLength(sb.length() - 1);
k--;
}
sb.append(c);
}
if (k > 0) {
sb.setLength(sb.length() - k);
}
return sb.toString();
}
}
时空复杂度 O ( n ) O(n) O(n)。