题目描述
你知道行编辑器吗?不知道也没关系,现在我会告诉你:1如果你收到一个‘#’,那么你应该删掉一个你已经收到的字符,不包括‘#’;2如果你收到‘@’,那么你应该把你收到的一整行都删掉。(‘#’和‘@’都为不可见字符。)你明白了吗?现在轮到你去解决这个问题啦!
输入
第一行是一个整数T,代表有T组数据。 | 样例输入
3 whli##ilr#e(s#*s) outcha@putchar(*s=#++) returnWA##A!!##C
|
输出
每组数据输出一行经过行编辑器编辑过的字符串,具体可以看样例。
| 样例输出
while(*s) putchar(*s++) returnAC |
解题思路:刚开始的时候,题目是这样的。
表示一脸懵逼。。。从网上找了下这个题目的原版,就在上面了。这个题目用栈解决比较容易,最后把结果反转一下就可以了。
前段时间刚整理过字符串反转的博客,也算是起了点作用啊。。。
地址:https://blog.csdn.net/yong_zi/article/details/81450281
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N =sc.nextInt();
String line = sc.nextLine();
for(int k=0;k<N;k++){
String s = sc.nextLine();
Stack<Character> stack = new Stack<Character>();
String res = "";
for(int i=0;i<s.length();i++){
if(s.charAt(i) == '#'){
if (!stack.empty()){
char c = stack.pop();
}
}else if(s.charAt(i)=='@'){
while(!stack.empty()){
char c = stack.pop();
}
}else{
stack.push(s.charAt(i));
}
}
while (!stack.empty()){
res+=stack.pop();
}
System.out.println(new StringBuffer(res).reverse().toString());
}
}
}