leetcode 一道簡單的不能再簡單的題了
給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "(){}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: ""
輸出: true
很簡單一道題,但我還是做錯了。。。
class solution ') else
} else if (c == ')') else
} else if (c == ']') else
} else
}return stack.isempty();// 如果棧不為空(false),說明有未匹配的左括號
}}
我的錯誤很明顯,stack有可能為空,這時候用pop()
判斷棧中內容就會拋異常,不是沒有想到這個問題,但考慮這個問題後就會造成**非常冗餘。以僥倖的心理提交了一下,果不其然沒通過,倒不如說通過了反而會懷疑用例的質量。
所以這道題非常簡單,但如何把**寫簡潔難到了我這個演算法初學者。最後在題解中看到乙個解法。
class solution else if (c == '[') else if (c == '');
} else if (stack.isempty() || c != stack.pop())
}return stack.isempty();// 如果棧不為空(false),說明還有左括號沒找到預期的匹配
}}
棧的作用從記錄歷史變成記錄預期,所以棧為空這種可能只需要在預期那裡判斷一次而不需要在每個條件處判斷。
思路都是一樣的,複雜度也都是o(n),但是**就會簡潔許多。這其實就相當於兩種解法了。
演算法的作用不僅僅是優化時間和空間,更易於閱讀與理解的**也應該是演算法的意義之一。
LeetCode20有效括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true示例 2 輸入 輸出 true示例 3 輸入 輸出 false示例 4 輸入 輸出 false示例 5 輸入 輸出 tr...
Leetcode 20 有效括號
leetcode 20 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true pthon 列表 如 a a b 字典 如 dict not ...
leetcode 20 有效括號
怎麼減少if語句,判斷是否是某乙個值,將值存進map中,是否在map中,若在,則是 匹配用map 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出...