Leetcode——20有效的括號

20.給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。

有效字符串需滿足:

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字符串可被認爲是有效字符串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

【思路】
和諾瓦科技的筆試題是一樣的,不過這裏複雜的是有三種類型的括號,所以首先需要定義一個哈希表把三種括號保存起來。然後將輸入的字符串從左到右判斷,當一個字符爲右括號的時候就是不合法的。當字符串爲左括號時則入棧,當爲右括號時需要看其是否能夠與左括號匹配起來,當都不滿足時返回false,最後根據棧是否爲空來判斷是否括號都能匹配上。
【運行代碼】

package leetcode_50;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;

import javax.imageio.event.IIOReadWarningListener;

public class Leetcode_20 {

	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		String s=sc.nextLine();
		boolean result;
		result=isValid(s);
		System.out.print(result);
	}

	private static boolean isValid(String s) {
		Map<Character, Character> map=new HashMap<>();
		map.put('(', ')');
		map.put('{', '}');
		map.put('[', ']');
		char[] ch=s.toCharArray();
		Stack<Character> stack=new Stack<>();
		if(s.length()>0&&!map.containsKey(ch[0])) return false;
		for(int i=0;i<s.length();i++){
			if(stack.isEmpty()||map.containsKey(ch[i])){
				stack.push(ch[i]);
				//System.out.print(stack.peek()+"aaa");
			}
			else if(map.get(stack.peek())==ch[i])
				stack.pop();
			else 
				return false;
		}
		return stack.isEmpty();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章