[Leetcode][JAVA][第20题][Stack][Map]

【问题描述】 20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。示例 1:输入: "()"
输出: true来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

【解答思路】

1. 时间复杂度:O(N) 空间复杂度:O(N)
public boolean isValid(String s) {char[] symbol=s.toCharArray();Stack<Character> stack=new Stack<Character>();Map<Character,Character> map=new HashMap<Character,Character>(){{put('(',')');put('[',']');put('{','}');}};for (char c:symbol){if (c=='(' || c=='[' || c=='{')stack.push(c);  //这里自动装箱,并压入栈中elseif (!stack.empty() && c==map.get(stack.peek())){stack.pop();continue;}else if (!stack.empty() && c!=map.get(stack.peek())) //stack栈不为空(避免找栈顶报错)且括号不匹配return false;else    //stack栈为空,但有反括号return false;}if (stack.empty())  //因为可能出现((((({{{{{{[[[[这种无反括号情况return true;elsereturn false;}
}
2.非Map +栈 时间复杂度:O(N) 空间复杂度:O(N)
public boolean isValid(String s) {if(s.isEmpty())return true;Stack<Character> stack=new Stack<Character>();for(char c:s.toCharArray()){if(c=='(')stack.push(')');else if(c=='{')stack.push('}');else if(c=='[')stack.push(']');else if(stack.empty()||c!=stack.pop())return false;}if(stack.empty())return true;return false;}
3.Map +数组 时间复杂度:O(N) 空间复杂度:O(N)
class Solution {public boolean isValid(String s) {//Object put(Object key, Object value): 向集合中加入元素Map<Character,Character> charMap = new HashMap<>();charMap.put(')', '(');charMap.put('}', '{');charMap.put(']', '[');char []stack = new char[s.length()];int top = -1;for(int i = 0 ; i < s.length() ; i++){if(charMap.containsValue(s.charAt(i))) {stack[++top] = s.charAt(i);}if(charMap.containsKey(s.charAt(i))) {//Object get(Object key): 获得与关键字key相关的值if( top == -1 || stack[top--] != charMap.get(s.charAt(i))) {return false;}}}return top == -1;}  }

【总结】

1.括号匹配->栈 Stack
2. Map 的常用方法:

 1 添加,删除操作:Object put(Object key, Object value): 向集合中加入元素Object remove(Object key):   删除与KEY相关的元素void putAll(Map t):   将来自特定映像的所有元素添加给该映像void clear(): 从映像中删除所有映射2 查询操作:Object get(Object key): 获得与关键字key相关的值
  1. Stack 的常用方法:
push( num) 入栈
pop() 栈顶元素出栈
empty() 判定栈是否为空
peek() 获取栈顶元素
search(num) 判端元素num是否在栈中,如果在返回1,不在返回-1。    注意pop()和peek()的区别。pop()会弹出栈顶元素并返回栈顶的值,peek()只是获取栈顶的值,但是并不会把元素从栈顶弹出来  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(137):java异常初识

//java异常初识 public class test78 {public static void main(String[] args) {countArraylength( -1 );}public static int countArraylength(int length) {int[] nums new int[length];return nums.length;} } 运行结果

Java如何随机出石头剪刀布_JAVA编程实现石头剪刀布

我不是焊工import java.util.Scanner;public class Jsb {public static void main(String[] args) {while (true) {result(input(), random());System.out.println("");}}public static int input() {System.out.println("请输入&#xff1a;1-剪刀&#xff0c;…

java学习(138):异常处理

//异常 public class test79 {//定义方法声明定义异常&#xff0c;在满足条件时抛出异常对象&#xff0c;程序转向异常处理public double count(double n,double m)throws Exception {if (m 0) {//如果除数等于0.则抛出异常实例throw new Exception("对不起。除数不能等…

[Java]中[this][super]用法总结

this this是自身的一个对象&#xff0c;代表对象本身&#xff0c;可以理解为&#xff1a;指向对象本身的一个指针。 this的用法在java中大体可以分为3种&#xff1a; 1.普通的直接引用 这种就不用讲了&#xff0c;this相当于是指向当前对象本身。 2.形参与成员名字重名&am…

java泛型参数约束_Java泛型方法如何约束方法类型参数?

我一直在阅读有关泛型方法的文章,以为我理解了泛型类型参数如何约束方法参数类型,但是当我用实际代码测试了一些想法时,我得到了意外的结果.这是我不理解的简单通用方法&#xff1a;private static void foo(T[] t1, T[] t2){t2[0] t1[0];}...String[] stringArray new Strin…

Leetcode 950. Reveal Cards In Increasing Order

题目 链接&#xff1a;https://leetcode.com/problems/reveal-cards-in-increasing-order/ Level: Medium Discription: In a deck of cards, every card has a unique integer. You can order the deck in any order you want. Initially, all the cards start face down (un…

java学习(139):多个catch块

import java.sql.Connection;import java.io.IOException; import java.sql.SQLException;//java异常处理 //异常 public class test82 {//定义方法声明定义异常&#xff0c;在满足条件时抛出异常对象&#xff0c;程序转向异常处理public double count(double n, double m, Con…

[Leedcode][JAVA][第289题][生命游戏]

【问题描述】 根据 百度百科 &#xff0c;生命游戏&#xff0c;简称为生命&#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态&#xff1a;1 即为活细…

MySQL报错113_mysql 2003 (113)

1. 问题描述远程访问192.168.2.200主机的mysql数据库时, 出现以下错误:[plain] view plain copy # mysql -host192.168.2.200 -uroot -p Enter password: ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘192.168.2.200‘ (113)2. 解决方法首先确保mysql开启了远程…

MySQL修改表名示例

首先&#xff0c;我们新建一个名为test_table的表&#xff1a; drop table if exists test_table; create table test_table select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_SCHEMAinformation_schema; 然后&#xff0c;我们执行如下语句&#xf…

java学习(140):1.7后新特性

import java.sql.Connection;import java.io.IOException; import java.sql.SQLException;//java异常处理 //异常 public class test82 {//定义方法声明定义异常&#xff0c;在满足条件时抛出异常对象&#xff0c;程序转向异常处理public double count(double n, double m, Con…

[剑指offer]面试题第[67]题[Leetcode][JAVA][第8题] 字符串转换整数 (atoi)[字符串]

【问题描述】 请你来实现一个 atoi 函数&#xff0c;使其能将字符串转换成整数。首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为止。接下来的转化规则如下&#xff1a;如果第一个非空字符为正或者负号时&#xff0c;则将…

java 面板 选择颜色_[代码全屏查看]-java颜色选择器

[1].[代码] [Java]代码package com.liuxing.test;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JColorChooser;import javax.swing.JFrame;import javax.swing.JLabel;impor…

java学习(141):自定义捕捉异常

//自定义异常类 public class ArrayElement extends Exception{public static final int MAX_NUM1000;private static final String MESSAGE"集合存储元素过多";public ArrayElement(){}public String getMessage(){return MESSAGE"最大元素限制为"MAX_NU…

[Leedcode][JAVA][第42题][动态规划][双指针][栈]

【问题描述】 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。![image.png](https://upload-images.jianshu.io/upload_images/17025746-87f6db1a993ce416.png?imageMogr2/auto-orient/strip%7CimageVie…

java环境变量设置优化_Mac/windows配置jdk环境变量-seo优化只选拉一八科技

Mac/windows配置jdk环境变量Mac配置jdk环境变量直接双击dmg文件&#xff0c;然后单击[下一步]完成安装。请忽略[配置jdk环境变量]直接跳转到[检查jdk是否安装成功]。Windows配置jdk环境变量窗户系统配置1.右键单击桌面上的“计算机”&#xff0c;然后单击“属性”2.单击“高级系…

java学习(142):file类的基本创建

//file类的基本创建 import java.io.File;public class test85 {public static void main(String[] args){//创建文件对象String filePath"e:\\1.txt";File filenew File( filePath );System.out.println( filenull );//无论给定的文件虚拟路径是否存在//创建file在j…

speech模块实现语音识别

1.pip安装speech、pywin32 pip install speech pip install pywin322.例子 #!/usr/bin/python # coding:utf-8 from __future__ import unicode_literals import speech import os import sys import webbrowser__author__ "klx" # Create your views here. phrase …

java phantomjs alert_Python+Selenium+PhantomJS脚本中的Javascript警报

我尝试用Python脚本在DSL调制解调器中“单击”Javascript警报以确认重新启动&#xff0c;如下所示&#xff1a;#!/usr/bin/env pythonimport seleniumimport timefrom selenium import webdrivercap {uacceptSslCerts: True,uapplicationCacheEnabled: True,ubrowserConnectio…

[Leedcode][JAVA][第460题][LFU]

【问题描述】 设计并实现最不经常使用&#xff08;LFU&#xff09;缓存的数据结构。它应该支持以下操作&#xff1a;get 和 put。get(key) - 如果键存在于缓存中&#xff0c;则获取键的值&#xff08;总是正数&#xff09;&#xff0c;否则返回 -1。 put(key, value) - 如果键…