牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?
输入描述:
一个字符串,仅由小写字母组成。(字符串长度不大于300000)
输出描述:
一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。
输入:
abbc
复制输出:
ac
import java.util.*;
public class Main{
/**
* 解题思路::
* 采用StringBuilder构造栈的方法,当前后两个字母不一样时
* 存入栈中,如果一样则出栈,继续遍历字符串
*
* @param args
*/
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String s=scanner.nextLine();
StringBuilder stb=new StringBuilder();
int j=-1;
for(int i=0;i<s.length();i++){
if(j==-1||s.charAt(i)!=stb.charAt(j)){
stb.append(s.charAt(i));
j++;
}else stb.deleteCharAt(j--);
}
if(stb.length()==0) System.out.println("0");
else System.out.println(stb);
}
}
给定一个字符串,通过消除相邻的重复字符,找到字符串的最短形式。此问题可以通过栈数据结构解决,Java实现中使用StringBuilder动态构建结果。
1160

被折叠的 条评论
为什么被折叠?



