import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return bool布尔型 */ public boolean is_valid_cow_communication (String s) { // write code here Stack<Character> ss = new Stack<>(); for (char i : s.toCharArray()) { if (i == '(' || i == '{' || i == '[') { ss.push(i); } else { if (i == ')' && (ss.isEmpty() || ss.peek() != '(')) return false; if (i == '}' && (ss.isEmpty() || ss.peek() != '{')) return false; if (i == ']' && (ss.isEmpty() || ss.peek() != '[')) return false; ss.pop(); } } return ss.isEmpty(); } }
该代码使用的编程语言是Java。
这道题考察的知识点是使用栈(stack)来判断字符串中的括号是否匹配。该问题可以通过栈的先进后出特性来解决。
代码的详细文字解释如下:
- 首先定义了一个 Solution 类,其中包含一个方法 is_valid_cow_communication,用于判断给定的字符串中的括号是否匹配。
- 方法接收一个字符串类型的参数 s,表示待判断的字符串。
- 在方法内部,创建一个 stack<int> 类型的栈 ss,用于保存左括号。
- 使用循环遍历字符串 s 中的每个字符。
- 如果遇到左括号 (、{ 或者 [,则将其压入栈 ss 中。
- 如果遇到右括号 )、} 或者 ],则判断栈 ss 是否为空,或者栈顶元素与当前遍历到的右括号不匹配。如果满足这些条件之一,则返回 false 表示括号不匹配。
- 如果以上条件都不满足,即当前遍历到的字符是右括号且与栈顶元素匹配,那么从栈 ss 中弹出栈顶元素。
- 完成字符串的遍历后,检查栈 ss 是否为空。如果为空,则表示所有左括号都有与之匹配的右括号,返回 true 表示括号匹配;否则,返回 false 表示括号不匹配。
通过使用栈来判断括号是否匹配,遍历整个字符串一次即可完成判断操作。