java实战字符串3:反转每对括号间的子串,多个括号嵌套时,逐层反转
题目描述
给出一个字符串 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
备注:当多括号嵌套时,内部括号里面的字母可能被多次反转,请仔细阅读几个示例!!
解答:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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); } } |
本文来自博客园,作者:{Justin_Hu},转载请注明原文链接:{https://www.cnblogs.com/gchenghu/}
分类:
实战学java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?