日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

301.Remove Invalid Parentheses

發布時間:2025/3/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 301.Remove Invalid Parentheses 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

Remove the minimum number of invalid parentheses in order to make the input string valid. Return all possible results.

Note: The input string may contain letters other than the parentheses?(?and?).

Examples:

"()())()" -> ["()()()", "(())()"] "(a)())()" -> ["(a)()()", "(a())()"] ")(" -> [""]

鏈接:?http://leetcode.com/problems/remove-invalid-parentheses/

題解:

給定String,去除invalid括號,輸出所有結果集。一開始想的是DFS + Backtracking,沒有堅持下去。后來在Discuss里發現了jeantimex大神的BFS方法非常好,于是搬過來借鑒。方法是我們每次去掉一個"("或者")",然后把新的string加入到Queue里,繼續進行計算。要注意的是需要設置一個boolean foundResult,假如在這一層找到結果的話,我們就不再繼續進行下面的for循環了。這里應該還可以繼續剪枝一下,比如記錄當前這個結果的長度len,當queue里剩下的string長度比這個len小的話,我們不進行驗證isValid這一步。

Time Complexity - O(n * 2n), Space Complexity - O(2n)

public class Solution {public List<String> removeInvalidParentheses(String s) {List<String> res = new ArrayList<>();if(s == null) {return res;}Queue<String> queue = new LinkedList<>();Set<String> visited = new HashSet<>();queue.offer(s);boolean foundResult = false;while(!queue.isEmpty()) {s = queue.poll();if(isValid(s)) {res.add(s);foundResult = true;}if(foundResult) {continue;}for(int i = 0; i < s.length(); i++) {char c = s.charAt(i);if(c == '(' || c == ')') {String t = s.substring(0, i) + s.substring(i + 1);if(!visited.contains(t)) {queue.offer(t);visited.add(t);}}}}return res;}private boolean isValid(String s) {int leftCount = 0;for(int i = 0; i < s.length(); i++) {char c = s.charAt(i);if(c == '(') {leftCount++;} else if (c == ')') {leftCount--;}if(leftCount < 0) {return false;}}return leftCount == 0;} }

?

Reference:

https://leetcode.com/discuss/67842/share-my-java-bfs-solution

https://leetcode.com/discuss/67853/my-c-dfs-solution-16ms

https://leetcode.com/discuss/67919/java-optimized-dfs-solution-3-ms

https://leetcode.com/discuss/67861/short-python-bfs

https://leetcode.com/discuss/72208/easiest-9ms-java-solution

https://leetcode.com/discuss/67861/short-python-bfs

https://leetcode.com/discuss/72208/easiest-9ms-java-solution

https://leetcode.com/discuss/67908/java-bfs-solution-16ms-avoid-generating-duplicate-strings

https://leetcode.com/discuss/67821/and-bfs-java-solutions-add-more-optimized-fast-dfs-solution

https://leetcode.com/discuss/68038/clean-java-solution-bfs-optimization-40ms

https://leetcode.com/discuss/68010/fast-optimized-dfs-java-solution

?

總結

以上是生活随笔為你收集整理的301.Remove Invalid Parentheses的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。