鱼C论坛

 找回密码
 立即注册
查看: 839|回复: 1

[技术交流] C++刷leetcode(1021. 删除最外层的括号)【深度优先搜索】

[复制链接]
发表于 2020-4-17 16:56:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 糖逗 于 2020-5-8 17:57 编辑

题目描述:
  1. 有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。

  2. 如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。

  3. 给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。

  4. 对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。

  5.  

  6. 示例 1:

  7. 输入:"(()())(())"
  8. 输出:"()()()"
  9. 解释:
  10. 输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
  11. 删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
  12. 示例 2:

  13. 输入:"(()())(())(()(()))"
  14. 输出:"()()()()(())"
  15. 解释:
  16. 输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
  17. 删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
  18. 示例 3:

  19. 输入:"()()"
  20. 输出:""
  21. 解释:
  22. 输入字符串为 "()()",原语化分解得到 "()" + "()",
  23. 删除每个部分中的最外层括号后得到 "" + "" = ""。
  24.  

  25. 提示:

  26. S.length <= 10000
  27. S[i] 为&#160;"(" 或&#160;")"
  28. S 是一个有效括号字符串

  29. 来源:力扣(LeetCode)
  30. 链接:https://leetcode-cn.com/problems/remove-outermost-parentheses
  31. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码



  1. #include <iostream>
  2. #include <vector>
  3. #include <string>

  4. using namespace std;

  5. bool valid(string temp){
  6.     int count = 0;
  7.     for(auto cha : temp){
  8.         if(count < 0) return false;
  9.         if(cha =='(') count ++;
  10.         if(cha == ')') count--;

  11.     }
  12.     return count == 0;
  13. }
  14. void dfs(string S, string& res, int start, string temp){
  15.     if(start > S.size()) return;
  16.     if(valid(temp)){
  17.         if(temp.size() > 2){
  18.             res += temp.substr(1, temp.size()-2);
  19.         }
  20.         temp = "";
  21.     }
  22.     temp += S[start];
  23.     dfs(S, res, start + 1, temp);
  24. }
  25. string removeOuterParentheses(string S) {
  26.     string res;
  27.     dfs(S, res, 0, "");
  28.     return res;
  29. }

  30. int main(void){
  31.         string input;
  32.         cin >> input;
  33.         cout << removeOuterParentheses(input) << endl;
  34.         return 0;
  35. }
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-17 16:57:18 | 显示全部楼层
递归思想
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 12:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表