leetcode每日一题
[1738] 找出第 K 大的异或坐标值
[1744] 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
[231] 2的幂
堆排复习
[461] 汉明距离
[1190] 反转每对括号间的子串
[1707] 与数组中元素的最大异或值
[810] 黑板异或游戏
[1035] 不相交的线
[692] 前K个高频单词
[872] 叶子相似的树
[1442] 形成两个异或相等数组的三元组数目
[993] 二叉树的堂兄弟节点
[421] 数组中两个数的最大异或值
[13] 罗马数字转整数
[12] 整数转罗马数字
[1269]. 停在原地的方案数
[1310] 子数组异或查询
[1734] 解码异或后的排列
本文档使用 MrDoc 发布
-
+
首页
[1190] 反转每对括号间的子串
## [1190] 反转每对括号间的子串 [力扣原题链接](https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses/) 给出一个字符串 `s`(仅含有小写英文字母和括号)。 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。 注意,您的结果中 **不应** 包含任何括号。 **示例 1:** <pre><strong>输入:</strong>s = "(abcd)" <strong>输出:</strong>"dcba" </pre> **示例 2:** <pre><strong>输入:</strong>s = "(u(love)i)" <strong>输出:</strong>"iloveu" </pre> **示例 3:** <pre><strong>输入:</strong>s = "(ed(et(oc))el)" <strong>输出:</strong>"leetcode" </pre> **示例 4:** <pre><strong>输入:</strong>s = "a(bcdefghijkl(mno)p)q" <strong>输出:</strong>"apmnolkjihgfedcbq" </pre> **提示:** * `0 <= s.length <= 2000` * `s` 中只有小写英文字母和括号 * 我们确保所有括号都是成对出现的 * * ### 思路 * 依次遍历字符串,找到所有最外层括号后反转数组,由于是遍历数组,反转过程中不能先去除括号,应该保证括号状态不反转(即反转后右括号肯定在左边,改回左括号),并递归检查该括号内是否还有括号,直到没有括号。 ### 代码 ```cpp class Solution { public: void reverseHelper(string &s,int being_index,int end_index) { int left =being_index; int index = 0; for(int i = being_index; i < end_index; ++i) { if(s[i] == '(') { if(index == 0) left = i; index ++; } if(s[i] == ')') { index --; if(index == 0) { int tmp_left = left; int tmp_right = i; while(tmp_left < tmp_right) { char tmp = s[tmp_left]; s[tmp_left] = s[tmp_right]; s[tmp_right] = tmp; if(s[tmp_left] == '(' || s[tmp_left] == ')') { s[tmp_left] = s[tmp_left] == '(' ? ')' : '('; } if(s[tmp_right] == '(' || s[tmp_right] == ')') { s[tmp_right] = s[tmp_right] == '(' ? ')' : '('; } tmp_left ++; tmp_right --; } if(tmp_left == tmp_right &&( s[tmp_left] == '(' || s[tmp_left] == ')')) { s[tmp_left] = s[tmp_left] == '(' ? ')' : '('; } reverseHelper(s,left + 1,i); } } } } string reverseParentheses(string s) { reverseHelper(s,0,(int)s.size()); string tmp; for(int i = 0; i < (int)s.size(); ++i) { if(s[i] != '(' && s[i] != ')') { tmp.push_back(s[i]); } } s = tmp; return s; } }; ```
ty
2021年5月26日 15:17
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
阅读量
次
本站总访问量
次
本站访客数
人次
Markdown文件
分享
链接
类型
密码
更新密码