题目描述

给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。

注意,您的结果中 不应 包含任何括号。

解答要求时间限制:1000ms, 内存限制:256MB
输入

输入为一行带有括号的字符串(只包含英文小写字母和左右小括号)
最大长度不会超过10000个字符

输出

反转括号内字符串并输出(只有英文小写字母)

样例1

输入

(abcd)

输出

dcba
样例 2

输入

(u(love)i)

输出

iloveu
样例 3

输入

(i(u(wa)e)h)

输出

huawei
样例 4

输入

a(bcdefghijkl(mno)p)q

输出

apmnolkjihgfedcbq

备注:当多括号嵌套时,内部括号里面的字母可能被多次反转,请仔细阅读几个示例!!

解答:

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
Stack<Character> sta = new Stack<>();
Queue<Character> que = new LinkedList<>();// 接收每个括号中的元素
for (int i = 0; i < str.length(); i++) {
char cha = str.charAt(i);
if (cha != ')') {
sta.push(cha);
} else {
while (true) {
char tem = sta.pop(); // 对每个小括号中的元素进行反转
if (tem == '(')
break;
que.add(tem);
}
}
if (i != str.length() - 1) {
while (!que.isEmpty()) {
sta.push(que.poll());
}
}
}
// 结束循环时,结果是栈中结果加队列中的元素,注意栈中的元素出来后会被反转
StringBuffer bf = new StringBuffer();
while (!sta.isEmpty()) {
bf.append(sta.pop());
}
bf.reverse();
while (!que.isEmpty()) {
bf.append(que.poll());
}
System.out.print(bf);
}
}

  



java实战字符串3:反转每对括号间的子串,多个括号嵌套时,逐层反转的更多相关文章

  1. 【LeetCode】反转每对括号间的子串

    [问题]给出一个字符串 s(仅含有小写英文字母和括号). 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果. 注意,您的结果中 不应 包含任何括号. 示例 : 输入:s = ...

  2. JAVA实现字符串反转,借助字符数组实现

    public static String reverseStr(String str) { int len = str.length(); char ch[] = str.toCharArray(); ...

  3. Java-Runoob-高级教程-实例-字符串:05. Java 实例 - 字符串反转

    ylbtech-Java-Runoob-高级教程-实例-字符串:05. Java 实例 - 字符串反转 1.返回顶部 1. Java 实例 - 字符串反转  Java 实例 以下实例演示了如何使用 J ...

  4. java常见字符串的操作

    /** * java常见字符串的操作 */ public class Test7 { public static void main(String args[]){ StringBuffer sBuf ...

  5. JAVA四则运算字符串解释器

    最近学习到后缀表达式,于是基于后缀表达式的思想,写了一个四则运算解释器,输入字符串类型的四则运算表达式,可以直接得到结果,支持括号嵌套. 实现时主要考虑以下两点: 字符串中运算符和数字分离 运算符优先 ...

  6. Java字符字符串类

    Java字符字符串类 Character 类 Character 类用于对单个字符进行操作.Character 类在对象中包装一个基本类型 char 的值在实际开发过程中,我们经常会遇到需要使用对象, ...

  7. JAVA中字符串常见操作

    String str1="hello,world";String str2="Hello,World"; 1.字符串的比较:例,System.out.print ...

  8. Java常量字符串String理解

    Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用  "eq ...

  9. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  10. java截取字符串中的数字

    java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...

随机推荐

  1. C# readonly修饰符

    readonly修饰符在作祟 强化官方解释: readonly是一个修饰字段的关键字:被它修饰的字段只有在初始化或者构造函数中才能够赋值. readonly修饰的引用类型字段必须始终引用同一对象: r ...

  2. sliver生成木马.sh

    生成sliver木马多个步骤合成一个sh #!/bin/bash # date: 20230222 host_ip=$1 WORK_DIR=/opt/work rm -rf /root/.sliver ...

  3. 使用 Visual Studio 断点调试 DLL

    继上文说到使用 IDA 和 WinDbg 调试无 dmp 文件  那么在有源码的情况下可以直接断点调试 DLL,目的是查看 DLL 内部的函数调用 场景: 程序执行到某个 DLL 时突然崩溃,先确定 ...

  4. 【转载】nltk英文自定义分词

    NLTK项目地址: https://github.com/nltk/nltk_data/tree/gh-pages/packages NLTK基础分词用例: https://www.cnblogs.c ...

  5. Java纯手打web服务器(二)

    概要:这里对上一篇中的访问资源进行改进,将访问servlet和静态资源进行区分. 主要不同的地方是加入了两种分析器 servlet分析器 if (request.getUri().startsWith ...

  6. 16. Class字节码结构

    1. 相关概念 1.1字节码文件的跨平台性 Java 语言是跨平台的(write once, run anywhere) 当 Java 源代码成功编译成字节码后,如果想在不同的平台上面运行, 则无须再 ...

  7. 一文搞懂Vue的MVVM模式与双向绑定

    v-model 是 Vue.js 框架中用于实现双向数据绑定的指令.它充分体现了 MVVM(Model-View-ViewModel)模式中的双向数据绑定特性.下面我们将详细解释 v-model 如何 ...

  8. [VueJsDev] 快速入门 - vscode 自动格式化

    [VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html vscode 自动格式化(vue) ::: details ...

  9. private priv 私人 pri=prim first v=self 自己第一

    private priv 私人 pri=prim first v=self 自己第一 private v自己-私人的 pri 来自PIE*per,向前,穿过 pri = pre 向前(这么理解也说的过 ...

  10. pcm5102芯片解析之基本概念

    一 前记 1 在音频领域深耕,那就要不断的前行.最近有几个项目需要用到pcm5102这颗料,藉此机会,针对这个料进行深入的研究一下.做一一些简要的分析. 二 概念 音频芯片的指标,其实,很多年都没啥变 ...