题解 | #牛群的秘密通信#
牛群的秘密通信
https://www.nowcoder.com/practice/f0047999594d4cd39f85d7347c6941af
知识点:栈
这道题属于栈的基本题目,只需要考虑三种括号的匹配。共有两种情况:
1.出现左括号,需要入栈,等待后续相应右括号的匹配
2.出现右括号,查看当前栈顶是否是对应的左括号,若不是,则匹配失败直接返回,若是,则左右括号匹配,将左括号出栈
最终遍历所有字符后,若栈不为空,则说明有多余左括号未匹配,则匹配失败,若栈为空,则匹配成功。
Java题解如下:
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return bool布尔型 */ public boolean is_valid_cow_communication (String s) { // write code here Deque<Character> stack = new ArrayDeque<>(); Map<Character, Character> map = new HashMap<>(); map.put(')', '('); map.put('}', '{'); map.put(']', '['); char[] c = s.toCharArray(); int n = c.length; for(int i = 0; i < n; i++) { if(c[i] == ')' || c[i] == '}' || c[i] == ']') { if(stack.isEmpty() || !stack.peek().equals(map.get(c[i]))) { return false; }else { stack.pop(); } }else { stack.push(c[i]); } } return stack.isEmpty(); } }