当前位置: 首页 > news >正文

【华为OD题库-110】反转每对括号间的子串-java

题目

给出一个字符串s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中不应包含任何括号。
示例1:
输入: s = “(abcd)”
输出: “dcba”
示例2:
输入: s = “(u(love)i)”
输出: “iloveu”
解释: 先反转子字符串“love",然后反转整个字符串。
示例3:
输入: s = “(ed(et(oc))el)”
输出: “leetcode”
解释: 先反转子字符串"oc”,接着反转“etco”,然后反转整个字符串。
示例4:
输入: s = "a(bcdefghijkl(mno)p)q”
输出: “apmnolkjihgfedcbq”

思路

利用栈的先入后出特性,遇到),这将字符串翻转后重新入栈
最后栈中的数据就是要求的字符串,此时应该先入先出,外层可以用双端队列实现

题解

package hwod;import java.util.LinkedList;
import java.util.Scanner;public class ReverseSub {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.nextLine();System.out.println(reverseSub(s));}private static String reverseSub(String s) {LinkedList<Character> queue = new LinkedList<>();LinkedList<Character> tmp = new LinkedList<>();for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == ')') {while (!queue.isEmpty()&&queue.peekLast() != '(') {tmp.addLast(queue.removeLast());}if(!queue.isEmpty()) queue.removeLast();while (!tmp.isEmpty()) {queue.addLast(tmp.removeFirst());}} else {queue.addLast(s.charAt(i));}}StringBuilder sb = new StringBuilder();while (!queue.isEmpty()) {sb.append(queue.removeFirst());}return sb.toString();}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

说明

本专栏所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_31076523/article/details/134176793。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

相关文章:

  • Promise,async和js的事件循环机制
  • FPFA.一种二倍频电路代码描述以及测量详情
  • jar混淆,防止反编译,Allatori工具混淆jar包
  • springboot对接WebSocket实现消息推送
  • SpringBoot 3 集成Hive 3
  • 第十五节TypeScript 接口
  • 【MySQL】:超详细MySQL完整安装和配置教程
  • 【网络编程】基于UDP数据报实现回显服务器程序
  • 沉浸式go-cache源码阅读!
  • pytest 的 fixture 固件机制
  • 竞赛保研 基于RSSI的室内wifi定位系统
  • STM32软硬件CRC测速对比
  • Django之按钮(actions)
  • Linux服务器 部署飞书信息发送服务
  • 信息系统定级与等级测评的具体过程
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • (三)从jvm层面了解线程的启动和停止
  • 【知识碎片】第三方登录弹窗效果
  • 2017届校招提前批面试回顾
  • miaov-React 最佳入门
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 微信支付JSAPI,实测!终极方案
  • 一份游戏开发学习路线
  • 正则表达式
  • 仓管云——企业云erp功能有哪些?
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何用纯 CSS 创作一个货车 loader
  • (Forward) Music Player: From UI Proposal to Code
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三分钟)速览传统边缘检测算子
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)IOS中获取各种文件的目录路径的方法
  • ***详解账号泄露:全球约1亿用户已泄露
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .“空心村”成因分析及解决对策122344
  • .aanva
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core 版本不支持的问题
  • .NET Core 中的路径问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [30期] 我的学习方法
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [C#小技巧]如何捕捉上升沿和下降沿