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

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

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

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

 

示例 1:

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

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

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

 

代码:

复制代码
string removeOuterParentheses(string S) {
    int L=1;int R=0;
    string ans;
    for(int i=1;i<S.size();i++){
        if(S[i]=='(')L++;
        else R++;
        if(R!=L)ans.push_back(S[i]);
        else {
            i++;L=1;R=0;
        }
    }
    return ans;
}
复制代码

 

posted @   别关注我了,私信我吧  阅读(172)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
Live2D
点击右上角即可分享
微信分享提示