去除连续字典序字符串问题
问题描述
给定你一个字符串,要求去除里面的字典序连续的字符串
例如“ecdfgba”,我们首先去除“cd”,此时字符串为“efgba”,继续去除“efg”,最后得到“ba”
思路分析
这道题的最优解法应该是使用栈的思想,我们遍历字符串,如果字符串为空,则直接将其入栈,如果不为空,我们获取栈顶元素,查找此时后面有没有和它构成字典序连续的字符串,有的话则将栈顶元素pop出来,并将指针指向下一个不为连续字典序的位置
代码实现
package com.feng;
import java.util.Stack;
/**
* Created by FengBin on 2021/9/11 9:59
*/
public class Solution {
public static void main(String[] args) {
String s = "ecdfgba";
String res = new Solution().find(s);
System.out.println(res);
}
private String find(String s) {
int n = s.length();
int right = 0;
Stack<Character> stack = new Stack<>();
while (right < n) {
if (stack.isEmpty()) {
stack.push(s.charAt(right));
++right;
}else {
int index = 1;
int val = stack.peek();
boolean flag = false;
while(right < n && val + index == s.charAt(right)) {
++right;
++index;
flag = true;
}
//如果flag为true表示栈顶元素和后面的元素构成连续的字典序,right此时指向的是不满足的位置
if (flag) {
stack.pop();
}else {
stack.push(s.charAt(right));
++right;
}
}
}
StringBuffer sb = new StringBuffer();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.reverse().toString();
}
}