迪庆企业网站建设公司,汕头拿家做网站,东莞住建网,半厘米wordpress给定一个只包括 (#xff0c;)#xff0c;{#xff0c;}#xff0c;[#xff0c;] 的字符串 s #xff0c;判断字符串是否有效。
有效字符串需满足#xff1a;
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左…给定一个只包括 (){}[] 的字符串 s 判断字符串是否有效。
有效字符串需满足
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1 输入s () 输出true示例 2 输入s ()[]{} 输出true示例 3 输入s (] 输出false 题目来源力扣LeetCode 链接https://leetcode.cn/problems/valid-parentheses 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
思路 由于左右括号具有对应关系所以我们采用map来将右括号作为“键”左括号作为“值”再使用“栈”来对字符串进行操作遍历字符串如果是左括号就将其存入“栈”中如果不是则去和栈顶元素作匹配如果匹配成功则栈顶元素出栈直到遍历完整个字符串最后只需要判断“栈”中还有没元素如果为空则说明所有括号配对完成反之则没有匹配完。
代码如下
public static boolean isValid(String s) {if(s.length()%21) {//当字符串长度为奇数时一定不会匹配成功直接返回falsereturn false;}//map存放括号匹配规则MapCharacter,Character truemapnew HashMapCharacter, Character(){{put(},{);put(),();put(],[);}};//利用栈来完成匹配StackCharacter stacknew StackCharacter();for(int i0;is.length();i) {//遍历字符串当某个字符是右括号时if(truemap.containsKey(s.charAt(i))) {//栈为空或者栈顶元素和当前字符不匹配时返回falseif(stack.isEmpty()||stack.peek()!truemap.get(s.charAt(i))) {return false;}//否则栈顶元素出栈stack.pop();}else {//如果不属于“键”则说明是左括号元素入栈stack.push(s.charAt(i));}}return stack.isEmpty();}