左神课堂开始

2024-01-05 03:08
文章标签 课堂 左神

本文主要是介绍左神课堂开始,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这些都是左神(左程云)课堂里讲的例子,写下自己的理解。

1、已知一个字符串都是由左括号(和右括号)组成,判断该字符串是否是有效的括号组合。

例子:

有效的括号组合:()()(())(()())

无效的括号组合:(())(()()(()

这题比较简单,

 1,可以先定义一个状态 int status ==0 ,当遇到“)”这个状态就改变:--status;

 2,当遇到“(”也改变其其状态:status++;

 3,当遇到其他的字符就直接返回 false;

public static boolean isValid(String str){if (str == null || str.equals("")){return false;}char[] chas = str.toCharArray();int status = 0;for (int i = 0; i < chas.length; i++){if (chas[i] != ')' && chas[i] != '('){return false;}if (chas[i] == ')' && --status < 0){return false;}if (chas[i] == '('){status++;}}return status == 0;}



2、题目进阶:

已知一个字符串都是由左括号(和右括号)组成,返回最长有效括号子串的长度。

该题:其实也很简单,但是是在左神讲完了之后,我才觉得的。

 (())(()(()))

 可以定义一个数组 int[] dp = new int[chas.length];长度就是上面字符串的长度。该数组就是为了保存每个位置上最大子串的长度。看下表:

  i     0  1  2  3  4  5  6  7

 chas   (  )  (  (  )  (  )  )

 dp     0  2  0  0  2  0  4  8

 


  从上表可以看出。

   dp的值,只有在“)”上计算才有意义。

   当i = 6 时:最大子串是"前面最大子串"的长度 +2(只要出现一对,最少+2);

   而然,"前面的最大子串"怎么去获得呢?

       需要通过 pre = i - dp[i-1]-1 ;比如:i = 7时,pre = 7-4-1 = 2;

       然后,还需要注意前面是否还存在 成对符号“()”所以就需要 加上 dp[pre-1]。这样 i= 7的时候,结果dp[7] = 8;

   

for (int i = 1; i < chas.length; i++){if (chas[i] == ')'){pre = i - dp[i - 1] - 1;if (pre >= 0 && chas[pre] == '('){dp[i] = dp[i - 1] + 2 + (pre > 0 ? dp[pre - 1] : 0);}}res = Math.max(res, dp[i]);}


完整代码:

public class Problem_01_ParenthesesProblem
{public static boolean isValid(String str){if (str == null || str.equals("")){return false;}char[] chas = str.toCharArray();int status = 0;for (int i = 0; i < chas.length; i++){if (chas[i] != ')' && chas[i] != '('){return false;}if (chas[i] == ')' && --status < 0){return false;}if (chas[i] == '('){status++;}}return status == 0;}public static int maxLength(String str){if (str == null || str.equals("")){return 0;}char[] chas = str.toCharArray();int[] dp = new int[chas.length];int pre = 0;int res = 0;for (int i = 1; i < chas.length; i++){if (chas[i] == ')'){pre = i - dp[i - 1] - 1;if (pre >= 0 && chas[pre] == '('){dp[i] = dp[i - 1] + 2 + (pre > 0 ? dp[pre - 1] : 0);}}res = Math.max(res, dp[i]);}return res;}public static void main(String[] args){String str1 = "((())())";System.out.println(isValid(str1));System.out.println(maxLength(str1));String str2 = "(())(()(()))";System.out.println(isValid(str2));System.out.println(maxLength(str2));String str3 = "()(()())";System.out.println(isValid(str3));System.out.println(maxLength(str3));}
}

 

左神:语录

记住: 看到子串,子数组一般都是  以每个位置开头,以每个位置结尾。几乎可以解决70%。

但是,子序列却不是这样的。



               






     


  

 



   


这篇关于左神课堂开始的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

小琳Python课堂:深入理解Python对象:状态、创建与管理

大家好,这里是小琳Python课堂。今天我们继续深入理解Python对象的状态、创建与管理。让我们一起来探索这些概念,以帮助你更好地掌握Python编程。 一、Python对象的状态 1. 实例属性与类属性 Python对象的属性分为实例属性和类属性。实例属性是对象独有的,而类属性则被类的所有实例共享。 实例属性:比如汽车的颜色、品牌和价格,每个汽车对象都有其独特的实例属性。类属性:比如

如何快速融入大学课堂

快速融入大学课堂是适应大学生活的重要一步。以下是一些实用的建议,帮助你快速融入大学课堂并取得良好的学习效果。 ### 1. 提前准备 - **课前预习**:在上课前预习课程内容,了解基本概念和知识点,这样在课堂上更容易跟上老师的讲解。 - **准备学习材料**:带上笔记本、笔、课本和其他必要的学习材料,确保在课堂上能够及时记录和查阅。 ### 2. 积极参与课堂 - **主动提问**:在课堂上

实践课堂|2016成都站|报名开始啦!

Hi,QingCloud 的小伙伴们,欢迎参加史上最有营养的云知识讲堂。 QingCloud 实践课堂系列开始于 2014 年末,在深圳、上海、广州、成都、杭州、北京六个城市,QingCloud 的研发工程师们同近千名 CIO 、架构师、开发者、运维工程师……分享了 QingCloud 的技术理念、功能特性和使用技巧,还有来自人民网、融云、泰捷视频、杏树林、友好速搭、百姓网、冰点、顺丰速运、洋葱

小琳AI课堂:大模型的发展历程:从创新到挑战

大家好,这里是小琳AI课堂。今天我们来聊聊大模型的发展历程,这是一段充满创新与挑战的故事。🚀 让我们追溯到20世纪50年代,那时计算机科学和人工智能还处于萌芽阶段。 早期探索(1950s-1970s) 早期探索是大模型发展历程中的一个关键时期,它标志着人工智能作为一门学科的诞生。这个时期,计算机科学和人工智能还处于起步阶段,科学家们充满好奇地探索如何让机器模仿人类智能。这一阶段的探索不仅奠定

登录页面设计课堂,用8个案例带你学习

本文将以 8个最受欢迎的登录页模板为例,给大家分析想要提升登录页转化率,设计登录页时应该关注的要点 作为设计师,在设计登录页面时,除了要让你的界面设计拥有出色的视觉效果,还要想尽可能地获取新用户,并留住老用户,即提升登录页面的转化率。然而,要设计出一个拥有不错转化率的登录页面设计,并不是一件容易的事,设计师在进行设计时必须要懂得以提升转化的目标来进行设计。那么,设计师该如何做才能更好的提升登录

【GIS开发小课堂】vue3+Cesium.js三维WebGIS项目实战(一)

随着市场对数字孪生的需求日益增多,对于前端从业者的能力从对框架vue、react的要求,逐步扩展到2D、3D空间的交互,为用户提供更紧密的立体交互。近年来前端对GIS的需求日益增多。 本文档详细介绍了使用Vue3和Cesium.js构建三维WebGIS项目的步骤,涵盖Cesium的基础知识、项目搭建、坐标转换、相机系统、地图与地形加载、空间数据管理和交互等内容,旨在为前端开发者提供一个立体交互的

小琳Python课堂:Python高并发实现的基本原理(高阶版)

大家好,这里是小琳Python课堂! 今天,我们将从高阶视角深入探讨Python高并发实现的基本原理,特别是线程安全性、线程同步和原子性这三个核心概念。这些概念对于构建复杂、高效的多线程应用程序至关重要。 线程安全性 首先,让我们深入理解线程安全性。线程安全性涉及到在多线程环境中对共享资源的正确访问。在Python中,由于全局解释器锁(GIL)的存在,真正的并行执行需要通过多进程实现。然而,即

2014-12-8课堂笔记:转换场景的实现

步骤: 一:拷贝--粘贴----修改文件名 二:修改类名 三:在HelloWorld.h中包含MyScene.h文件; 四:修改HelloWorld.cpp文件中的菜单回调函数      1:全部删除;      2:加入:         auto m=MyScene::createScene();         Director::getInstance()->repla

HTML5培训第16节课堂笔记

HTML5培训第16节课堂笔记 多媒体专题: 1.       拍照: (1)       调用系统接口 var cam=plus.camera.getCamera(1);//number值 1 前置   (2)       拍照 拍照:var cam=plus.camera.getCamera(1);                         cam.captureImag

HTML5培训第15节课堂笔记(HTML5+maps,geolocation)

HTML5培训第15节课堂笔记 1.地理信息定位: window.οnlοad=function(){         mui.plusReady(function(){            plus.geolocation.getCurrentPosition(function(p){                latitude=p.coords.latitude;