zoukankan      html  css  js  c++  java
  • Leetcode 1190. 反转每对括号间的子串

    Leetcode 1190. 反转每对括号间的子串

    原题链接:Leetcode 1190. 反转每对括号间的子串

    题目描述

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

    示例1

    输入: (abcd)
    输出: dcba

    示例2

    输入: (u(love)i)
    输出: iloveu

    示例3

    输入: (ed(et(oc))el)
    输出: leetcode

    示例4

    输入: a(bcdefghijkl(mno)p)q
    输出: apmnolkjihgfedcbq

    示例5

    输入: ta()usw((((a))))
    输出: tauswa

    解题思路1:栈

    详见这位大佬的题解:栈+动图演示

    解题思路2:正则匹配

    正则表达式:\(([^()]*?)\)

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    class Solution {
        public String reverseParentheses(String s) {
            StringBuilder str = new StringBuilder(s);
            Pattern pattern = Pattern.compile("\(([^()]*?)\)");
            while (str.indexOf("(") >= 0) {
                Matcher matcher = pattern.matcher(str);
                if (matcher.find()) {
                    // 如果匹配到括号对,则使用StringBuilder将括号内的内容reverse
                    StringBuilder t = new StringBuilder(str.substring(matcher.start() + 1, matcher.end() - 1)).reverse();
                    // 然后再将reverse后的字符串替换到正则匹配到的位置上去
                    str.replace(matcher.start(), matcher.end(), t.toString());
                }
            }
            return str.toString();
        }
    }
    

    解题思路3:字符串处理

    class Solution {
        public String reverseParentheses(String s) {
            StringBuilder str = new StringBuilder(s);
            while (str.indexOf("(") >= 0) {  // 如果字符串内还有括号则进行处理
                int start = str.lastIndexOf("(");  // 找到最后一个括号的下标
                int end = str.indexOf(")", start) + 1;  // 找到最后一个括号之后的第一个反括号的下标
                StringBuilder t = new StringBuilder(str.substring(start + 1, end - 1)).reverse();  // 取到两括号之间的字符串进行reverse
                str.replace(start, end, t.toString());  // 用reverse后的字符串替换原字符串
            }
            return str.toString();
        }
    }
    
  • 相关阅读:
    python中单例模式
    python中常用的内置方法
    面向对象之反射
    绑定方法与非绑定方法
    python多态与抽象类
    python的组合与封装
    面向对象之继承与派生
    面向对象之类与对象
    python模块与包
    数据结构与算法_语言和框架特性前瞻和bug修复
  • 原文地址:https://www.cnblogs.com/hurentian/p/14812334.html
Copyright © 2011-2022 走看看