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();
        }
    }
    
  • 相关阅读:
    Swizzle在OC问题排查中的应用
    MacOS中系统提供的音频单元
    Mac catalyst 使用iOS-AudioUnit的音频采集、播放
    删除单向链表中的某一个节点
    C语言的的free和c++的delete的区别
    Mac下使用源码编译安装TensorFlow CPU版本
    ROC曲线与AUC值
    Linux中如何产生core文件?
    更改Linux默认栈空间的大小
    互信息(Mutual Information)
  • 原文地址:https://www.cnblogs.com/hurentian/p/14812334.html
Copyright © 2011-2022 走看看