dp括号匹配 网易面试题_面试题:大括号验证

dp括号匹配 网易面试题

这是较容易的编码任务之一,但是您仍然可以在一些初步的技术筛选中达到目标。 问题看起来像这样:

给定仅包含字符'('')''{''}''['']'的字符串,请确定输入字符串是否有效。

括号必须以正确的顺序闭合, "()""()[]{}"均有效,而"(]""([)]"则无效。

描述取自Leetcode(c) 。

您如何解决?

我们一直在使用这项任务进行技术筛选。 有趣的是,有多少人真的不知道该如何处理(请注意,这是Leetcode上的“轻松”类别)。 有些人尝试使用正则表达式。 有些人试图想出一种蛮力解决方案,遍历字符串并计算开括号和闭括号。 但是,如果您考虑一下,您将理解,两者都不足以。 例如,如何在最简单的([)]情况下计数帮助?

您应该想到的解决方案是stack ,但是如果您从未接受过解决编码问题的培训,则可能不会。 为什么要堆叠? 好吧,因为只有当您看到闭合的支架时,才可以检查一对支架或支架的完整性。 但这意味着打开的那个应该放在某个地方等待,并在某些数据结构之上进行检查。 允许LIFO访问的结构是一个堆栈 。 碰巧我们在Java中有一个现成的Stack类 。

那么,简单的解决方案如何?
基本思想是,您开始遍历字符串。 如果符号是打开符号之一,则将其推入堆栈。 如果即将关闭,您可以查看堆栈,看看是否匹配。 如果是,则将其从堆栈中弹出。 如果堆栈最后为空,则返回true。

import java.util.*;public class Groups{private static final List<Character> OPEN = Arrays.asList('(', '{', '[');private static final List<Character> CLOSE = Arrays.asList(')', '}', ']');public static boolean groupCheck(String s){if (s == null || s.length() == 0) {return true;}Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++) {char current = s.charAt(i);if (isOpen(current)) {stack.push(current);} else {if (stack.isEmpty()) {return false;}char prev = stack.peek();if (isMatch(prev, current)) {stack.pop();}}}return stack.isEmpty();}private static boolean isOpen(char c) {return OPEN.contains(c);}private static boolean isClose(char c) {return CLOSE.contains(c);}private static boolean isMatch(char prev, char next) {return isOpen(prev) && (OPEN.indexOf(prev) == CLOSE.indexOf(next));}}

还有其他解决方法吗? 如果您没有想到堆栈怎么办? 与往常一样,有多种方法可以解决问题。 让我们看这个例子: ([]){}

让我们尝试替换正确匹配的对:

“([[]){}”。replace(“ []”,“”)=>“(){}”。replace(“(()”,“”)=>“ {}”。replace(“ {} ”,“”)=>“”

因此,我们可以循环遍历字符串,用空字符串替换“ {}”,“()”和“ []”。 当结果为空时,表示所有对都匹配。 如果没有变空怎么办? 我们如何摆脱周期? 好吧,我们需要检查一轮替换后字符串的长度是否已更改。 如果还没有,那么我们就破产了。

public class Groups{public static boolean groupCheck(String s) {int len;do {len = s.length();s = s.replace("()", "");s = s.replace("{}", "");s = s.replace("[]", "");} while (len != s.length());return s.length() == 0;}
}

看起来更好。 简单易读,但实际上是否更好? 我会说不,不是。 为什么? 好吧,因为String类是不可变的 ,因此每次执行s.replace()时,我们都会在堆上创建一个新的字符串对象。

那么,如何最好地做到这一点呢? 我们可以使用StringBuilder类重写代码吗? 好吧,不是直接的,因为它没有replaceAll方法。 您必须使用现有的replace方法自己编写它。 Apache Commons库中有一个StrBuilder类,它确实具有此方法,但它不是标准的Java类,您必须添加一个依赖项。

因此,即使这个简单的任务也可以给您一些思考。 但是,对于面试,任何解决方案都可以。 如果堆栈不是您脑海中最先想到的,那么您可以不做任何事情。

翻译自: https://www.javacodegeeks.com/2017/02/interview-questions-verify-braces.html

dp括号匹配 网易面试题

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

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

相关文章

MySQL如何删除有外键约束的数据

在数据库中查看外键是否有效,值为1表示外键有效 mysql> select foreign_key_checks; ---------------------- | foreign_key_checks | ---------------------- | 1 | ---------------------- 1 row in set (0.00 sec)将外键的值设置为0&#xff0c;此时…

python绘制动画示例_Python使用matplotlib绘制动画的方法

本文实例讲述了Python使用matplotlib绘制动画的方法。分享给大家供大家参考。具体分析如下&#xff1a;matplotlib从1.1.0版本以后就开始支持绘制动画下面是几个的示例&#xff1a;第一个例子使用generator&#xff0c;每隔两秒&#xff0c;就运行函数data_gen&#xff1a;# -*…

基于单片机步进电机ppt答辩_基于MCU和DSP的步进电机控制技术分析

来源 | 控制与传动步进电机已经渗透入我们生活的方方面面&#xff0c;本文介绍了一些重要的步进电机相关技术&#xff0c;为开发人员基本了解步进电机的工作原理提供了足够的信息&#xff0c;同时也介绍了用微控制器或数字信号处理器控制步进电机的方法。步进电机也叫步进器&am…

拼图登陆拼图二维码验证_另一个拼图观点

拼图登陆拼图二维码验证在过去的几周中&#xff0c;围绕Java 9即将发布及其最著名的功能&#xff1a;Java平台模块系统JPMS进行了激烈的辩论。 –以其项目名称Jigsaw更为人所知。 模块系统以正式规范过程的形式引入Java生态系统 – JSR –需要由专家组以最终形式批准。 在该专…

【C++】多线程(四)

这是多线程的最后一篇文章。 std::promise promise 的作用很简单&#xff0c;在一个线程t1中保存一个类型typename T的值&#xff0c;可供相绑定的std::future对象在另一线程t2中获取。事实上&#xff0c;它与future基本是成对出现的。来看下面的例子&#xff1a; //声明一个…

广告设计师如何使用python_设计师必看!高效率工具,30分钟完成别人一天的工作!...

原标题&#xff1a;设计师必看&#xff01;高效率工具&#xff0c;30分钟完成别人一天的工作&#xff01;世界上只有两种物质&#xff1a;高效率和低效率&#xff1b;世界上只有两种人&#xff1a;高效率的人和低效率的人。—— 萧伯纳今天这篇文章主要想和大家分享一个效率工具…

Linux/MacOS/Mac OS 命令终端/命令行如何查找文件/搜索文件和删除文件

文章目录问题一&#xff1a;我要在当前目录下查找名称中含有“Lib”的文件和目录&#xff0c;注意不要在子目录下查找问题二&#xff1a;在当前目录下如何删除名称中含有“abc”的文件和文件夹问题一&#xff1a;我要在当前目录下查找名称中含有“Lib”的文件和目录&#xff0c…

div获取第一个子节点jquery_【antd】Tree组件子节点不完全勾选获取父节点的值

注意⚠️&#xff1a;这篇文章适用于后台返回的树结构比较多的情况下&#xff0c;如果数据比较少的情况下&#xff0c;可以参考我的上一篇文章&#xff0c;操作起来比较简单我们在实际操作tree组件和后台交互的时候一般都是需要将父节点传过去&#xff0c;如图&#xff1a;点击…

java中的jpa_在JPA中处理Java的LocalDateTime

java中的jpa几天前&#xff0c;我在处理JPA中的LocalDateTime属性时遇到问题。 在这篇博客文章中&#xff0c;我将尝试创建一个样本问题来说明该问题以及我使用的解决方案。 考虑以下实体&#xff0c;该实体为特定公司的员工建模– Entity Getter Setter public class Employ…

修改value_Python | 快速修改或命名N个文件夹名称,你会吗?

#欢迎交流&#xff1a;shuilinggan163.com#工作中&#xff0c;经常会遇到需要修改或新建很多文件的文件命&#xff0c;是一件重复且头疼的事情&#xff0c;下面一组Python代码&#xff0c;轻松教你快速实现&#xff01;程序一&#xff1a;根据文件(SSSSSS)新建并命名空文件夹im…

linux离线安装python3.7教程_Linux傻瓜式七步完美安装Python3.7

1 安装依赖包yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc2 下载解压Python3.7# 1 首先切换到桌面cd /home# 2 下载wget http://www.python.org/f…

IntelliJ IDEA for Mac在MacOS模式下打开系统设置(偏好设置)的快捷键(Preferences Shortcut)

快捷键快捷键符号英文名称功能说明Command ,⌘,Open Settings dialog打开IDEA系统设置

gwt格式_GWT HTTP请求替代方案

gwt格式由于多种原因 &#xff0c;许多GWT用户放弃了RPC机制&#xff0c;这是GWT提供的调用后端的标准方法。 他们发现&#xff0c;在GWT RequestBuilder与其他可能不适合其应用程序模型的外部库之间迷失了自己。 这篇文章的目的是要通过GWT中众所周知的HTTP / Rest库来尝试使情…

簇的局部变量中布尔类型_java基础2(变量、常量、数据类型)

一、注释&#xff08;1&#xff09;什么是注释&#xff1f;解释说明的文字&#xff08;注释的内容不会被编译&#xff09;&#xff08;2&#xff09;注释的作用①对代码的解释说明 ②便于后期维护&#xff08;3&#xff09;注释的分类:①单行注释 //单行注释作用域:只在当前行有…

python生成海报_生成海报(前端 | python)

我最近没有摸鱼&#xff0c;一直都在工作。只不过目前需要爬一点数据 python 做的&#xff0c;之后看机会分享一下。忙着忙着老大说要生成海报&#xff0c;有个活动要给每个用户来个分享图。想法PS 批处理&#xff1f;脚本&#xff1f; 能甩出去的活都甩出去&#xff0c;机智如…

数位进制转换详解

文章目录进制进制转换二进制和十进制互相转换十进制 → 二进制十进制正整数 → 二进制十进制负整数 → 二进制十进制负小数 → 二进制十进制小数 → 二进制二进制 → 十进制二进制负整数 → 十进制二进制的正整数 → 十进制二进制小数 → 十进制二进制的负小数 → 十进制八进制…

java agent_如何脚踏实地构建Java Agent

java agent在构建Plumbr的多年中&#xff0c;我们遇到了许多具有挑战性的问题。 在其他方面&#xff0c;使Plumbr Java Agent可靠地执行而不会危及客户的应用程序&#xff0c;是一个特别棘手的问题。 从实时系统中安全地收集所有需要的遥测会带来很多问题。 其中一些非常简单&a…

python中链表和数组_数据结构笔记(一):数组、链表|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/(一)数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。1、数组支持随机访问&#xff0c;根据下标随机访问的时间复杂度为 O(1)。通过 a[i]_address a[0]_address i*元…

旋转散点图_聚类分析的结果如何用散点图展示出来?

SPSS系统聚类输出的树状图广受用户喜爱&#xff0c;二阶聚类也可以输出一系列美观的可视化图形用来观察聚类效果&#xff0c;但我们发现Kmeans均值聚类没有提供可视化程度高的图形&#xff0c;那怎么办&#xff0c;我们自己来制作。数据小兵推荐使用3D散点图全方位观察K均值聚类…

async 打包异常_重新打包流中的异常

async 打包异常Java 8已有两年历史&#xff0c;但是仍然存在社区尚未为其开发好的解决方案库的用例&#xff0c;甚至边缘用例。 如何处理流管道中的检查异常就是这样一个问题。 Stream操作接受的功能接口不允许实现抛出已检查的异常&#xff0c;但是我们可能要调用许多方法。 显…