leetcode_20. Valid Parentheses 括号匹配问题;java String实例的声明和初始化;没用栈;

题目:

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.

题意:

给定一个只包含字符'(',')','{','}','['和']'的字符串,确定输入字符串是否有效。
括号必须以正确的顺序关闭,“()”和“()[] {}”都有效,但“(]”和“([]]”不是。

 

代码:

python :

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        
        n = len(s)
        
        if n < 1 :
            return True
        
        left = '({['        #定义入栈的字符集合
        
        dic = {')':'(', '}':'{', ']':'['}        #用于匹配出栈的情况
        
        lis = []           #定义一个列表,功能相当于栈
        
        for x in s :
            if x in left :      #如果是左边的符号,则入栈
                lis.append(x)
            else :              #否则,就是右边的符号,考察匹配情况,看是否需要出栈
                if lis != [] and dic[x] == lis[-1] :   #栈不空且左右符号匹配上了,则出栈
                    lis.pop()
                else :           #如果需要匹配的时候,栈空,或者没匹配上,则不符合
                    return False
        
        if lis == [] :     #匹配完成后,如果栈空,则符合条件,否则还有没完全匹配上的
            return True
        else :
            return False

JAVA:

public class Solution {
    public boolean isValid(String s) {
        
        int n = s.length();         //原字符串的长度
        char[] str = new char[n];    //定义一个字符数组,充当栈的角色,判断括号匹配情况
        
        int i = 0;     //遍历原字符串
        int j = 0;      //记录str的长度,即栈中的字符个数
        while(i < n ){      //开始遍历原字符串
            char a = s.charAt(i);        //设当前字符串存在a中
            if( a == '(' || a == '{' || a == '[') {        //如果a是左括号,则直接进栈
                str[j] = a;
                j++;                  //栈中元素个数加1
            }
            else if( a == ')' || a == '}' || a == ']' ) {   //如果a是右括号,需要查看匹配情况
                if(j==0){              //之前栈是空的,即栈中没有左括号来与a匹配,则直接返回不匹配
                    return false;
                }
                else if( a == ')' ) {       //否则,栈不空;
                    if( str[j-1] != '('){     //如果a是‘)’,则判断栈顶元素是否是‘(’,如果不是,则不匹配;如果是,则匹配,j--,表示退栈
                        return false;
                    }
                    else {
                        j--;
                    }
                }
                else if( a == '}' ) {        //同样,判断栈顶是否是'{'
                    if( str[j-1] != '{'){
                        return false;
                    }
                    else {
                        j--;
                    }
                } 
                else{
                    if( str[j-1] != '['){         //同样,判断栈顶是否是'['
                        return false;
                    }
                    else {
                        j--;
                    }
                }
            }
            i++;
        }
        
        if(j==0){           //如果将原字符串遍历完,栈是空的,则匹配;否则,不匹配
            return true;
        }
        else {
            return false;
        }
    }
}

 

笔记:

1、char类型数组的声明和初始化:char[] str = new char[n];     //定义长度为n的字符串数组

      字符串数组访问第i个元素: str[i]

2、String 类型访问第i个元素:s.charAt(i)

3、声明和初始化一个字符串:

String  a =  "abc";  或者  String  a =  new String("abc");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值