【LeetCode】反转每对括号间的子串 Java 题解
题目描述
给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
复制代码
思路分析
认真理解题目,这是一个括号问题,面对括号处理问题,一般采用栈这种数据结构,来记录数据。
栈这种数据结构,具有后进先出(last in first out)的性质。在 Java 中,我常常使用 Deque 来实现 Stack 的功能。 Deque 是双端队列,使用起来更加方便。
代码实现的思路就是先找到最里层的括号,然后进行反转,逐层处理。
AC 代码
复制代码
总结
上述代码的时间复杂度是 O(n * n), 空间复杂度是 O(n)。
当我们对字符串进行频繁修改的时候,一般使用 StringBuffer 或者 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。具体实现可以从代码层面看一下。
StringBuffer 核心代码如下:
复制代码
StringBuilder 核心代码如下:
复制代码
由代码实现可知: StringBuffer 使用 synchronized 关键字修饰,是线程安全。StringBuilder 不是线程安全,效率更高!
坚持每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/025ca6de96c18c1e479dd5c70】。文章转载请联系作者。
评论