leetcode --20. Valid Parentheses

来源:互联网 发布:json 汉字 编辑:程序博客网 时间:2024/06/06 23:50
题目:

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.

分析:

给一个包含'('')''{''}''[' 和 ']'的字符,如果字符的括弧是正常的方式关闭的,比如"()" 和 "()[]{}" are,否则是无效的,比如"(]" 和 "([)]" 等。

此类问题比较简单,用栈处理,当字符为'(','{','['将字符串中的字符压入栈中, 当字符为')''}' 和 ']'时弹栈,判断弹出的与当前的匹配,匹配则继续,最后判断栈是否为空,空的话则有效,否则无效。

代码:

import java.util.*;
public class Solution {
    public boolean isValid(String s) {
        int k= s.length(); 
        if (k%2 != 0) return false;
        Stack<Character> ss = new Stack<Character>();//用栈来存储字符
        for(char c : s.toCharArray()){//foreach循环
            if(c=='{'||c=='('||c=='['){
                ss.push(c);
            }else if(c==']'){
                if(ss.isEmpty()||ss.pop()!='['){
                    return false;
                }
            }else if(c==')'){
                if(ss.isEmpty()||ss.pop()!='('){
                    return false;
                }
            }else if(c=='}'){
                if(ss.isEmpty()||ss.pop()!='{'){
                    return false;
                }
            }
        }
        return ss.isEmpty();
    }
}

知识点:

简单说下foreach的使用

For-Each循环也叫增强型的for循环,或者叫foreach循环。

For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。

For-Each循环的加入简化了集合的遍历。

For-Each循环的缺点:丢掉了索引信息。

当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。


语法如下:

  for(type element: array)

  {

        System.out.println(element);

  }

例子:

其基本使用可以直接看代码:

  代码中首先对比了两种for循环;之后实现了用增强for循环遍历二维数组;最后采用三种方式遍历了一个List集合。

import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ForeachTest{    public static void main(String[] args)    {        int[] arr = {1, 2, 3, 4, 5};                System.out.println("----------旧方式遍历------------");        //旧式方式                for(int i=0; i<arr.length; i++)        {            System.out.println(arr[i]);        }                System.out.println("---------新方式遍历-------------");                //新式写法,增强的for循环        for(int element:arr)        {            System.out.println(element);        }                System.out.println("---------遍历二维数组-------------");                //遍历二维数组                int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} ;                for(int[] row : arr2)        {            for(int element : row)            {                System.out.println(element);            }        }                //以三种方式遍历集合List                List<String> list = new ArrayList<String>();                list.add("a");        list.add("b");        list.add("c");                System.out.println("----------方式1-----------");        //第一种方式,普通for循环        for(int i = 0; i < list.size(); i++)        {            System.out.println(list.get(i));                    }                System.out.println("----------方式2-----------");        //第二种方式,使用迭代器        for(Iterator<String> iter = list.iterator(); iter.hasNext();)        {            System.out.println(iter.next());        }        System.out.println("----------方式3-----------");        //第三种方式,使用增强型的for循环        for(String str: list)        {            System.out.println(str);                    }    }}