Lintcode423-Valid Parentheses-Easy
思路:
数据结构:stack。遍历整个字符串,如果遇到左向括号( [ { 则入栈。如果遇到右向括号时,先检查栈是否为空,为空说明左右向括号数目不一致,返回false;不为空则弹出栈顶元素查看是否和右向括号匹配。遍历完,要return stack.isEmpty(); 确保栈内没有剩余。
代码:
public class Solution {
    /**
     * @param s: A string
     * @return: whether the string is a valid parentheses
     */
    public boolean isValidParentheses(String s) {
        Stack<Character> st = new Stack<Character>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '[' || c == '{') {
                st.push(c);
            }
            if (c == ')' || c == ']' || c == '}') {
                if (st.isEmpty()) {
                    return false;
                }
                char popChar = st.pop();
                if ( c == ')' && popChar != ')') {
                    return false;
                }
                if ( c == ']' && popChar != ']') {
                    return false;
                }
                if ( c == '}' && popChar != '}' ) {
                    return false;
                }
            }
        }
    return st.isEmpty();
    }
}
代码风格优化:String遍历每一个char(line 9) ; 用if-else分支更准确(line 10, 12)
 public class Solution {
     /**
      * @param s: A string
      * @return: whether the string is a valid parentheses
      */
     public boolean isValidParentheses(String s) {
         Stack<Character> st = new Stack<Character>();
         for (Character c : s.toCharArray()) {
             if (c == '(' || c == '[' || c == '{') {
                 st.push(c);
             } else {
                 if (st.isEmpty()) {
                     return false;
                 }
                 char popChar = st.pop();
                 if ( c == ')' && popChar != '(') {
                     return false;
                 }
                 if ( c == ']' && popChar != '[') {
                     return false;
                 }
                 if ( c == '}' && popChar != '{') {
                     return false;
                 }
             }
         }
     return st.isEmpty();
     }
 }
Lintcode423-Valid Parentheses-Easy的更多相关文章
- [leetcode] 20. Valid Parentheses (easy)
		
原题链接 匹配括号 思路: 用栈,遍历过程中,匹配的成对出栈:结束后,栈空则对,栈非空则错. Runtime: 4 ms, faster than 99.94% of Java class Solut ...
 - leetCode练题——20. Valid Parentheses
		
1.题目 20. Valid Parentheses——Easy Given a string containing just the characters '(', ')', '{', '}', ...
 - C# 写 LeetCode easy #20 Valid Parentheses
		
20.Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
 - LeetCode--To Lower Case && Remove Outermost Parentheses (Easy)
		
709. To Lower Case(Easy)# Implement function ToLowerCase() that has a string parameter str, and retu ...
 - 46.Valid Parentheses
		
Valid Parentheses My Submissions QuestionEditorial Solution Total Accepted: 106346 Total Submissions ...
 - [LeetCode] Longest Valid Parentheses 最长有效括号
		
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
 - [LeetCode] Valid Parentheses 验证括号
		
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
 - Longest Valid Parentheses
		
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
 - 72. Generate Parentheses  &&  Valid Parentheses
		
Generate Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
 - leetcode 32. Longest Valid Parentheses
		
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
 
随机推荐
- sublime3 快速生成html头文件
			
通过安装emmt插件老师来实现该功能(https://github.com/sergeche/emmet-sublime#readme) 1. 下载好后解压到文件夹: 2. 打开TS3,点击perfe ...
 - js中级小知识
			
1.作用域链 作用域:浏览器给js的一个生存环境(栈内存). 作用域链:js中的关键字var和function都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中.然后js从上到下逐行 ...
 - Python学习之旅(十)
			
Python基础知识(9):函数(Ⅰ) Python中函数的定义:是逻辑结构和过程化的一种编程方法 定义方法: def test(x): #def:定义函数的关键字 test:函数名 x:形参,也可以 ...
 - Centos7 修改系统时区timezone
			
Centos7 修改系统时区timezone 注意:修改Linux系统的时区以后,再安装jvm,jvm默认会使用系统的时区.如果系统时区设置错误,安装jvm后,再修改系统的时区,但jvm的时区仍然用不 ...
 - plupload多个实例,返回区分实例的返回
			
plupload多个实例很简单,但是麻烦的是,返回的时候没有明显标记区分input的id,好蛋疼 var uploader = new plupload.Uploader({ //实例化一个plupl ...
 - linux 强制删除杀死进程   sudo pkill uwsgi -9     杀死uwsgi  关闭防火墙 iptables -F
			
sudo pkill -f uwsgi -9 四.关闭防火强 iptables -F #清空规则 systemctl stop firewalld #关闭防火墙服务 ...
 - [人工智能] 安装python jupyter
			
1. 什么是python jupyter ? 简单的说,可以理解为一个IDE. http://jupyter.org/ 2. 安装python jupyter notebook http://ju ...
 - python摸爬滚打之day15----初识类
			
1.面向对象和面向过程 面向过程: 以事物的流程为核心. 优点: 负责的事物流程化, 编写简单; 缺点: 可拓展性差. 面向对象: 一切以对象为核心. 对象里封装着一切. 优点: 可拓展性强; 缺点 ...
 - Cartographer源码阅读(8):imu_tracker
			
IMU的输入为imu_linear_acceleration 和 imu_angular_velocity 线加速和角速度.最终作为属性输出的是方位四元数. Eigen::Quaterniond ...
 - C#设计模式(7)——适配器模式(Adapter Pattern)(转)
			
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...