Leetcode 301. 删除无效的括号 困难 bfs
题目:
给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。
返回所有可能的结果。答案可以按 任意顺序 返回。
示例 1:
输入:s = "()())()"
输出:["(())()","()()()"]
思路:
删除字符串中的左右括号,使得字符串有效。
有效的定义就是左括号数量始终大于等于右括号。且两者总数目一致。
使用BFS,每次获取当前层的所有可能,如果存在有效字符串,则保存结果并返回当前层所有有效结果。
每层只在之前的基础上删掉一个括号。
使用unordered_set来过滤重复结果。
class Solution { public: vector<string> removeInvalidParentheses(string s) { vector<string> ret; unordered_set<string> cur_set; cur_set.insert(s); while(!cur_set.empty()){ unordered_set<string> next_set; for(auto& str:cur_set){ if(isValid(str)){ ret.push_back(str); } } if(!ret.empty()){ return ret; } for(auto& str:cur_set){ for(int i=0;i<str.size();++i){ if(i>0&&str[i]==str[i-1]) continue; string next=str.substr(0,i)+str.substr(i+1,str.size()); next_set.insert(next); } } cur_set=next_set; } return ret; } bool isValid(string s){ int left=0,right=0; for(auto& c:s){ if(c=='(') left++; else if(c==')') right++; if(right>left) return false; } return left==right; } };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
分类:
leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-03-18 Python操作redis系列之 列表(list) (五)(转)
2016-03-18 Android动画学习笔记-Android Animation