括号序列Leetcode020(有效的括号)-------->栈的应用(男女配对)

2023-10-12 16:40

本文主要是介绍括号序列Leetcode020(有效的括号)-------->栈的应用(男女配对),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

力扣

描述:

题解:

java中栈的创建和使用_baobaohui-CSDN博客_java中的栈

思路:

首先在刷完至少两边该题之后我已经知道需要使用栈来解决这题了

但是对于栈的加入和弹出我一直都不知道咋用?

y总的思路我觉得很不错,他把{、]、( 这些左括号比作女生,女生一般比较被动,所以碰到左括号,都将它放在栈中,而右括号就是男生了,男生比较主动,所以碰到右括号时,会主动去寻找栈顶的女生假如与自己配对,就把这个女生带走,也即弹出栈顶字符。


知道思路后我尝试自己写了一下(正着想)

class Solution {
public:bool isValid(string s) {//先将括号左边的部分全部加入栈中stack<char> stack;for(int i=0;i<s.length();i++){if(s[i]=='('||s[i]=='{'||s[i]=='[') stack.push(s[i]);if(s[i]==')'&&stack.top()=='(') stack.pop();if(s[i]==']'&&stack.top()=='[') stack.pop();if(s[i]=='}'&&stack.top()=='{') stack.pop();}if(stack.empty()) return true;else return false;}
};

正着想的思路一旦碰到先输入右括号的行为就比较头疼了,因为这样的话栈是空的,会报错,比如下面这种:

 那么假如我们反过来,找它不配对的情况呢?就完美解决了这个问题

C++代码

class Solution {
public:bool isValid(string s) {//先将括号左边的部分全部加入栈中stack<char> stack;for(int i=0;i<s.length();i++){if(s[i]=='('||s[i]=='{'||s[i]=='[') stack.push(s[i]);else if(s[i]==')'){if(stack.empty()||stack.top()!='(') return false;else stack.pop();}else if(s[i]==']'){if(stack.empty()||stack.top()!='[') return false;else stack.pop();}else if(s[i]=='}'){if(stack.empty()||stack.top()!='{') return false;else stack.pop();}}if(stack.empty()) return true;else return false;}
};

代码:

Java代码

package Leetcode;import java.util.Stack;public class Leetcode020 {public boolean isValid(String s) {//构造栈用来存储左括号Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);//假如是左括号那么入栈if (c == '(' || c == '[' || c == '{') {stack.push(c);}else {if(stack.isEmpty()) return false;char top=stack.pop();if (c == ']' && top!='[') {return false;}if (c == ')' && top!='(') {return false;}if (c == '}' && top!='{') {return false;}}}return stack.isEmpty();}
}

这篇关于括号序列Leetcode020(有效的括号)-------->栈的应用(男女配对)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197120

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp