薯队长写了一篇笔记草稿,请你帮忙输出最后内容。
1.输入字符包括,”(“ , “)” 和 “<”和其他字符。
2.其他字符表示笔记内容。
3.()之间表示注释内容,任何字符都无效。 括号保证成对出现。
4.”<”表示退格, 删去前面一个笔记内容字符。括号不受”<”影响 。
输入描述:
输入一行字符串。长度<=10000.
输出描述:
输出一行字符串,表示最终的笔记内容。
示例1
输入
Corona(Trump)USA<<<Virus
输出
CoronaVirus
import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);StringBuffer stringBuffer = new StringBuffer(scanner.nextLine());//用来保存记录括号出现的下标List<Integer> k = new ArrayList<>();//用一个列表来装括号的匹配//遇见‘(’添加首次匹配位置进去//遇见‘)’从最后一次‘(’匹配位置开始删除字符串for(int i = 0; i < stringBuffer.length();){//遇到左括号if(stringBuffer.charAt(i)=='(') {k.add(i);i++;}//遇到<else if(stringBuffer.charAt(i)=='<'&&k.size()==0) {//去除i-1和i位置的元素stringBuffer.delete(i - 1, i + 1);i = i - 1;}//遇到右括号else if(stringBuffer.charAt(i)==')') {//从左括号出现的位置删到i位置stringBuffer.delete(k.get(k.size() - 1),i + 1);//调整i的位置i = k.get(k.size() - 1);//删除左括号的记录k.remove(k.size() - 1);}elsei++;}System.out.println(stringBuffer);}}
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String str = scanner.next();//判断str中是否有右括号while(str.contains(")") ) {//记录右括号的位置int right = str.indexOf(")");//从右括号的位置往前找左括号的位置int left = str.lastIndexOf("(",right);String n = "";//截取括号中的内容String rep = str.substring(left+1,right);//替换str = str.replace("(" +rep+")",n );}while(str.contains("<")&& str != null) {//找到<位置int index = str.indexOf("<");String m = "";//截取<之前一位的元素String rep2 = str.substring(index -1,index);str = str.replace(rep2 + "<",m );}System.out.println(str);}}
