leetcode每日不做题
461. 汉明距离
852. 山脉数组的峰顶索引
374. 猜数字大小
278. 第一个错误的版本
474. 一和零
231. 2 的幂
342. 4的幂
1074. 元素和为目标值的子矩阵数量
477. 汉明距离总和
12. 整数转罗马数字
1190. 反转每对括号间的子串
692. 前K个高频单词
1738. 找出第 K 大的异或坐标值
1442. 形成两个异或相等数组的三元组数目
993. 二叉树的堂兄弟节点
421. 数组中两个数的最大异或值
13.罗马数字转整数
本文档使用 MrDoc 发布
-
+
首页
1190. 反转每对括号间的子串
[力扣原题链接](https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses/) ## 题目 给出一个字符串`s`(仅含有小写英文字母和括号)。 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。 注意,您的结果中**不应**包含任何括号。 **示例 1:** ``` 输入:s = "(abcd)" 输出:"dcba" ``` **示例 2:** ``` 输入:s = "(u(love)i)" 输出:"iloveu" ``` **示例 3:** ``` 输入:s = "(ed(et(oc))el)" 输出:"leetcode" ``` **示例 4:** ``` 输入:s = "a(bcdefghijkl(mno)p)q" 输出:"apmnolkjihgfedcbq" ``` **提示:** * `0 <= s.length <= 2000` * `s`中只有小写英文字母和括号 * 我们确保所有括号都是成对出现的 ## 思路 循环字符串,遇到左括号就将其下标存入列表, 当遇到右括号时,将列表最后插入的数值取出, 结合右括号的下标位置获得需要反转的字符串, 将字符串反转后替换掉原来()括号包起来的字符串, 重复操作,最终获得没有括号的反转字符串。 ## 代码 语言:Java ``` class Solution { /** * 循环字符串,遇到左括号就将其下标存入列表 * 当遇到右括号时,将列表最后插入的数值取出 * 结合右括号的下标位置获得需要反转的字符串 * 将字符串反转后替换掉原来()括号包起来的字符串 * 重复操作,最终获得没有括号的反转字符串 * * @param s * @return */ public String reverseParentheses(String s) { // 列表,用于存放左括号的下标,当遇到成对的右括号时,拿出来并从列表删除 List<Integer> indexList = new ArrayList<>(); int startIndex = 0; // 左括号下标 int endIndex = s.length(); // 右括号下标 for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); if(ch == '(') { indexList.add(i); } else if(ch == ')') { startIndex = indexList.get(indexList.size()-1); indexList.remove(indexList.size()-1); endIndex = i; String tmp = s.substring(startIndex+1, endIndex); tmp = reverseString(tmp); // 将括号包起来的字符串替换成反转后的字符串 s = s.replace(s.substring(startIndex, endIndex+1), tmp); // 因为将一对括号剔除掉了,s长度减少了2,i需要减2 i -= 2; } } return s; } /** * 字符串反转输出 * * @param str * @return */ public String reverseString(String str) { StringBuffer sb = new StringBuffer(); for (int i = str.length()-1; i >= 0; i--) { sb.append(str.charAt(i)); } return sb.toString(); } } ```
renyi567
2021年5月26日 08:49
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
阅读量
次
本站总访问量
次
本站访客数
人次
Markdown文件
分享
链接
类型
密码
更新密码