关于LeetCode中Valid Parentheses一题的理解
来源:互联网 发布:java游戏破解合集 编辑:程序博客网 时间:2024/06/15 22:32
题目如下:
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
这道题也是想了很久,今天走路的时候突然想到可以用压栈弹栈的方式来实现,就马上去LeetCode把它撸完了,下面是已Accepted的代码:
public boolean isValid(String s) { Stack<String> stack = new Stack<String>(); for(int i=0;i<s.length();i++){ char candidate = s.charAt(i); if(candidate=='{'||candidate=='['||candidate=='('){ stack.push(candidate+""); }else{ if(stack.isEmpty()){ return false; } if((candidate=='}' && stack.peek().equals("{"))|| (candidate==']' && stack.peek().equals("["))|| (candidate==')' && stack.peek().equals("("))){ stack.pop(); }else{ return false; } } } if(stack.isEmpty()){ return true; }else{ return false; } }题目的解题思路如下:
(1)如果发现是输入'{','[','('是这三种之中的一种,就直接把它们压入栈中;
(2)如果输入为'}',']',')'就需要获取栈顶的元素,如果能和这三种匹配上就直接把它探出,即如果输入为‘}’就查看栈顶元素,如果是'{'就将'{'弹出,否则返回false;
(3)如果循环结束后,栈中还存在元素,就说明有未匹配的项,应当返回false,反之则返回true。
然后是评论区的回答,下面这个方法也是使用了“栈”,但是快一些,思路是一样的,代码如下:
public boolean isValid(String s) {char[] stack = new char[s.length()];int head = 0;for(char c : s.toCharArray()) {switch(c) {case '{':case '[':case '(':stack[head++] = c;break;case '}':if(head == 0 || stack[--head] != '{') return false;break;case ')':if(head == 0 || stack[--head] != '(') return false;break;case ']':if(head == 0 || stack[--head] != '[') return false;break;}}return head == 0;}依然来自评论区,思路一样,但是更精辟些,代码如下:
public boolean isValid(String s) {Stack<Character> stack = new Stack<Character>();for (char c : s.toCharArray()) {if (c == '(')stack.push(')');else if (c == '{')stack.push('}');else if (c == '[')stack.push(']');else if (stack.isEmpty() || stack.pop() != c)return false;}return stack.isEmpty();}大致就是这样。
0 0
- 关于LeetCode中Valid Parentheses一题的理解
- 关于LeetCode中Valid Anagram一题的理解
- 关于LeetCode中Valid Palindrome一题的理解
- LeetCode中Valid Parentheses的JAVA实现
- 和大神们学习每天一题(leetcode)-Valid Parentheses
- 关于Leetcode中sum of integers一题的理解
- 关于Leetcode中Same Tree一题的理解
- 关于LeetCode中Power of Two一题的理解
- 关于LeetCode中Reverse String一题的理解
- 关于LeetCode中Palindrome Number一题的理解
- 关于LeetCode中Invert Binary Tree一题的理解
- 关于LeetCode中Reverse Integer一题的理解
- 关于LeetCode中Ransom Note一题的理解
- 关于LeetCode中Find the Difference一题的理解
- 关于LeetCode中Remove Element一题的理解
- 关于LeetCode中Symmetric Tree一题的理解
- 关于LeetCode中Palindrome Linked List一题的理解
- 关于LeetCode中Longest Common Prefix一题的理解
- oracle avg() 绝对平均值
- 第4周项目2-建立“单链表”算法库
- 欢迎使用CSDN-markdown编辑器
- C++11中emplace的使用
- AIDL 跨应用服务
- 关于LeetCode中Valid Parentheses一题的理解
- 音乐播放器项目总结
- Qt pro->vs工程和vs工程->pro
- 循环队列实现
- Win10新建360浏览器快捷菜单
- java api文档的阅读技巧
- 跨越opengl和d3d的鸿沟(二):现代opengl
- Thinkphp+Jqueryfrom图片异步上传预览
- 数据转模型