题目
请编写函数,对给定的字符串,按相邻的两个相同字符可以消去的原则,在原字符串中反复消去相邻相同的字符,最后输出剩余字符数。
若要求得到的字符串仍保存在原字符数组中,直接在main编写程序即可,或通过返回值对str赋值。
输入样例1:
输入一个字符串(换行表示结束)。
ceefggabcc
输出样例:
cfab,两个相同字符消去;
分析
类似leetcode的20题有效括号,通过堆栈将无重复的字符写入堆栈,遇到相同的则弹栈,重复以上步骤
最后输出堆栈倒叙,字符串长度即为堆栈长度
代码实现
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(strDiv(str));
}
public static int strDiv(String str) {
//1.类似消括号,通过堆栈实现相邻字符串匹配
if(str.isEmpty()) return -1;
Stack<Character> stack = new Stack<Character>();
stack.push(str.charAt(0));
for(int i=1;i<str.length();i++) {
char index = str.charAt(i);
if(!stack.isEmpty() && index == stack.peek() ) {
stack.pop();
}else {
stack.push(index);
}
}
int len = stack.size();
//读
char[] temp = new char[len];
for(int j=0;j<len;j++) {
temp[len-1-j] = stack.pop();
}
//转字符串
str = String.valueOf(temp);
System.out.println(str);
return len;
}
若有不足的地方欢迎评论区指正。