leetcode_java.T020_ValidParentheses 给定一个只包含(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和‘]’的字符串,验证它是否是有效的。
来源:互联网 发布:网络炮仗什么意思 编辑:程序博客网 时间:2024/05/16 01:32
package leetcode.T020_ValidParentheses;
import java.util.Deque;
import java.util.LinkedList;
/**
* @Title: Solution.java
* @Package leetcode.T020_ValidParentheses
* @Description: TODO
* @author zhouzhixiang
* @date 2017-6-20 上午1:11:01
* @version V1.0
*/
public class Solution {
/**
* <pre>
* 原题
* 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.
*
* 题目大意
* 给定一个只包含(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和‘]’的字符串,验证它是否是有效的。
* 括号必须配对,并且要以正确的顺序。
*
* 解题思路
* 用一个栈来对输入的括号串进行处理,如果是左括号就入栈,如果是右括号就与栈顶元素看是否组成一对括号,
* 组成就弹出,并且处理下一个输入的括号,如果不匹配就直接返回结果。
* </pre>
*
* @param s
* @return
*/
public static void main(String[] args) {
String s = "()";
boolean b = new Solution().isValid(s);
System.out.println(b);
}
public boolean isValid(String s){
// 作为栈来插入元素
Deque<Character> stack = new LinkedList<>();
int index = 0;
Character top;
while(index<s.length()){
Character c = s.charAt(index);
switch (c) {
case '(':
case '{':
case '[':
stack.addFirst(c);
break;
case ')':
if(stack.isEmpty()){
return false;
}
top = stack.getFirst();
if(top == '('){
stack.removeFirst();
}else if(top == '}' || top == ']'){
return false;
}else{
stack.addFirst(c);
}
break;
case '}':
if(stack.isEmpty()){
return false;
}
top = stack.getFirst();
if(top == '{'){
stack.removeFirst();
}else if(top == ')' || top == ']'){
return false;
}else{
stack.addFirst(c);
}
break;
case ']':
if(stack.isEmpty()){
return false;
}
top = stack.getFirst();
if(top == '['){
stack.removeFirst();
}else if(top == ')' || top == '}'){
return false;
}else{
stack.addFirst(c);
}
break;
default:
return false;
}
index++;
}
return stack.isEmpty();
}
}
import java.util.Deque;
import java.util.LinkedList;
/**
* @Title: Solution.java
* @Package leetcode.T020_ValidParentheses
* @Description: TODO
* @author zhouzhixiang
* @date 2017-6-20 上午1:11:01
* @version V1.0
*/
public class Solution {
/**
* <pre>
* 原题
* 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.
*
* 题目大意
* 给定一个只包含(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和‘]’的字符串,验证它是否是有效的。
* 括号必须配对,并且要以正确的顺序。
*
* 解题思路
* 用一个栈来对输入的括号串进行处理,如果是左括号就入栈,如果是右括号就与栈顶元素看是否组成一对括号,
* 组成就弹出,并且处理下一个输入的括号,如果不匹配就直接返回结果。
* </pre>
*
* @param s
* @return
*/
public static void main(String[] args) {
String s = "()";
boolean b = new Solution().isValid(s);
System.out.println(b);
}
public boolean isValid(String s){
// 作为栈来插入元素
Deque<Character> stack = new LinkedList<>();
int index = 0;
Character top;
while(index<s.length()){
Character c = s.charAt(index);
switch (c) {
case '(':
case '{':
case '[':
stack.addFirst(c);
break;
case ')':
if(stack.isEmpty()){
return false;
}
top = stack.getFirst();
if(top == '('){
stack.removeFirst();
}else if(top == '}' || top == ']'){
return false;
}else{
stack.addFirst(c);
}
break;
case '}':
if(stack.isEmpty()){
return false;
}
top = stack.getFirst();
if(top == '{'){
stack.removeFirst();
}else if(top == ')' || top == ']'){
return false;
}else{
stack.addFirst(c);
}
break;
case ']':
if(stack.isEmpty()){
return false;
}
top = stack.getFirst();
if(top == '['){
stack.removeFirst();
}else if(top == ')' || top == '}'){
return false;
}else{
stack.addFirst(c);
}
break;
default:
return false;
}
index++;
}
return stack.isEmpty();
}
}
阅读全文
0 0
- leetcode_java.T020_ValidParentheses 给定一个只包含(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和‘]’的字符串,验证它是否是有效的。
- 给定一个字符串,确定它是否是回文,只考虑字母数字字符和忽略大小写。
- ping 一个ip,看它是否有效
- 随便指定一个目录,判断它是否是一个合法的JDK目录(by quqi99)
- 给定俩个字符串,只包含二进制。求字符串的和
- 面试题:给定一个数组,数组中只包含0和1。请找到一个最长的子序列,其中0和1的数量是相同的
- 有人认为“中文编码”是解决中国程序员编程效率的秘密武器,那么它是否是一个“银弹”?
- 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。 是否AC的规则如下: 1. zoj能AC; 2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者为空;
- 输入是一个只包含拼音的字符串,请输出对应的数字序列。
- 给定一个只包含小写字母的字符串,删除重复的字母,每个字母只出现一次。在所有结果中,输出字典顺序最小的。
- div判断它是否显示的
- 输入一个数,判断它是否是回文数。
- 输入一个字符,判断它是否是大写字母。
- 任意输入一个年份,判断它是否是闰年。
- 给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
- 给定一个数字,怎么判断它是不是回文形式的?
- 给定只包含正数的数组,给出一个方法,将数组中的数拼接起来,得到的数,是最大的。
- 输出一个大于三的的整数n,判定它是否为素数
- http cookie
- 重建二叉树
- day09
- 关于JVM环境,导致的字符编码转换无效的解决办法
- QT学习路五
- leetcode_java.T020_ValidParentheses 给定一个只包含(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和‘]’的字符串,验证它是否是有效的。
- [测试]测试题
- 专题——web.xml 中 url-pattern
- Activity背景透明和窗口化
- android 四种启动模式详解
- day10
- jquery解决小数点相加精度缺失问题
- NDK开发历程(一):android native code的调试方法
- JEESZ分布式框架简介--技术介绍文档