LeetCode题解 14 (3,98) 无重复字符的最长子串,验证二叉搜索树

news2024/9/26 3:25:26

文章目录

    • 无重复字符的最长子串(3)
      • 代码解答:
    • 验证二叉搜索树(98)
      • 代码解答:

无重复字符的最长子串(3)

在这里插入图片描述
从题目中可以得知我们要找到该字符串中没有重复元素的最长字串,这道题可以采用滑动窗口的方法来解决,今天在这里我们采用新的方法来解决。

首先我们先将该字符串转变为字符数组,同时创建1个HashSet,(因为HashSet是不允许存放相同元素的)定义1个新的指针index来准备遍历

        HashSet<Character> characters = new HashSet<>();
        char[] chars = s.toCharArray();
        int index = 0;

我们还要定义1个字符串最大的长度max,和一个start开始值(当一个重复元素加不进去时,我们就需要从头开始进行删除元素,直到能加入元素位置)

   int start = 0;
   int max = 0;

这时我们就开始进行遍历数组,往Hashet里面加入元素,如果可以加入,我们就更新max的值,不可以加入我们就用到start来从头开始删除元素,直到该元素可以加入为止。

         while(index < chars.length){
            //先往里面加元素
            char aChar = chars[index];
            //如果能加进去就直接添加
            if(characters.add(aChar)){
                max = Math.max(max,characters.size());
                index++;
            }else{
                //如果不能加进去,就从头部开始移除元素,直到能加进去为止
                characters.remove(chars[start]);
                start++;
            }
        }

代码解答:

class Solution {
    public int lengthOfLongestSubstring(String s) {
         //先定义1个HashSet
        HashSet<Character> characters = new HashSet<>();
        char[] chars = s.toCharArray();
        int index = 0;
        int start = 0;
        int max = 0;
        while(index < chars.length){
            //先往里面加元素
            char aChar = chars[index];
            //如果能加进去就直接添加
            if(characters.add(aChar)){
                max = Math.max(max,characters.size());
                index++;
            }else{
                //如果不能加进去,就从头部开始移除元素,直到能加进去为止
                characters.remove(chars[start]);
                start++;
            }
        }
        return max;
    }
}

验证二叉搜索树(98)

在这里插入图片描述
做这道题之前我们需要先知道什么是二叉搜索树,

二叉搜索树是根节点的数值要大于他的左子树的数值,同时也要小于右子树的数值,总结就是根节点的数值要比他的左子树的数值都要大,同时比右子树的数值都要小。

知道什么是二叉搜索树了,我们在这里就根据二叉搜索的特性来解决。
前面我们学习了二叉树的前序,中序,后序遍历,(学习二叉树的遍历)

这里我们将这个树进行一下中序遍历可以得到(1 2 3),可以看出是个升序数组,因此我们利用这一性质来进行做题

1.我们将该树进行中序遍历

//中序遍历
    public void infixOrder(TreeNode root){
        if(root == null){
            return;
        }
        infixOrder(root.left);
        list.add(root.val);
        infixOrder(root.right);
    }

这时我们就检查该数组是不是升序的,如果是升序的这个树就是二叉搜索树,如果不是就不是二叉搜索树,

        //判断该数组是不是升序的
        int min = list.get(0);
        for(int i = 1;i<list.size();i++){
            if(min < list.get(i)){
                //将min进行重置
                min = list.get(i);
            }else{
                return false;
            }
        }

代码解答:

class Solution {
    List<Integer> list = new ArrayList<>();
    public boolean isValidBST(TreeNode root) {
        //先将此树进行中序遍历
        infixOrder(root);
        //判断该数组是不是升序的
        int min = list.get(0);
        for(int i = 1;i<list.size();i++){
            if(min < list.get(i)){
                //将min进行重置
                min = list.get(i);
            }else{
                return false;
            }
        }
        return true;
    }
    //中序遍历
    public void infixOrder(TreeNode root){
        if(root == null){
            return;
        }
        infixOrder(root.left);
        list.add(root.val);
        infixOrder(root.right);
    }
}

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

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

相关文章

转行学Python开发 怎么快速入门

对于很多转行的新手而言&#xff0c;直接参加培训班是最省时省力的事情&#xff0c;参加培训班既不用担心自己学不会&#xff0c;也不用担心遇到不懂的问题时没有人解答&#xff0c;更重要的是培训班理论实践的教学更贴合实际市场需求。 Python目前是IT行业需求量最大的语言&a…

能够让你装逼的10个Python小技巧

列表推导式 你有一个list&#xff1a; bag [1, 2, 3, 4, 5] 现在你想让所有元素翻倍&#xff0c;让它看起来是这个样子&#xff1a; [2, 4, 6, 8, 10] 大多初学者&#xff0c;根据之前语言的经验会大概这样来做 bag [1, 2, 3, 4, 5] for i in range(len(bag)): bag[i] ba…

GitHub要求所有用户在2023年底前启用双因素身份验证

©网络研究院 GitHub 将要求所有在平台上贡献代码的用户在 2023 年底之前启用双因素身份验证 (2FA) 作为对其帐户的额外保护措施。 双因素身份验证通过在需要输入一次性代码的登录过程中引入额外步骤来提高帐户的安全性。 对于 GitHub 用户来说&#xff0c;账户接管可能…

猿如意中的【Wireshark】网络包分析工具详情介绍

一、工具名称 Wireshark-win64-3.6.5 二、下载安装渠道 Wireshark-win64-3.6.5 通过CSDN官方开发的【猿如意】客户端进行下载安装。 对&#xff0c;你没有看错&#xff0c;就是来自CSDN官方&#xff0c;这次&#xff0c;CSDN果然没有辜负广大技术人的期望&#xff0c;现在…

Redis详解

Redis详解1. 概述1.1 互联网架构的演变历程1.2 Redis入门介绍1.3 Redis/Memcache/MongoDB对比1.3.1 Redis和Memcache1.3.2 Redis和MongoDB1.4 分布式数据库CAP原理1.4.1 CAP简介1.4.2 CAP理论1.4.3 CAP总结2. 下载与安装2.1 下载2.2 安装2.3 安装后的操作2.3.1 后台运行方式2.3…

高级网络应用复习——三层生成树速端口实验(带命令,保姆级)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.知识点总结 1.生成树STP 2.生成树的算法 3.人为配置的作用…

罗德里格旋转公式 (Rodrigues’ Rotation Formula)

关于三维空间中的旋转&#xff0c;我们以前提到过基于欧拉角的旋转表达矩阵&#xff0c;它们分别描述了围绕 x 轴、y 轴、z 轴旋转后坐标应当如何变化。事实上&#xff0c;我们可以更进一步&#xff0c;推导出一个通用的、围绕过原点的任意轴旋转的公式。 题设 这一节我们来描…

linux-网络-nc命令

目录 概述 nc命令常用参数 nc命令示例 实现TCP/UDP侦听 作为client端发起TCP/UDP连接 服务器之间传输文件 网络测速 概述 在centos中&#xff0c;nc命令是ncat的软链接。 ncat是一个功能丰富的网络实用程序&#xff0c;是为nmap项目编写的&#xff08;Network Mapper&…

12个python超强学习网站!

一、python学习网站 1 CSDN 特点&#xff1a;从免费视频到入门项目&#xff0c;从入门到进阶&#xff0c;学习视频应有尽有&#xff0c;还有Python学习社区&#xff0c;良好的学习和沟通氛围&#xff01; 2 Python123 地址&#xff1a;python123 特点&#xff1a;北京理工…

适合零基础人群学习的Python入门教程,快来学习吧

适合零基础人群学习的Python入门教程学什么&#xff1f;小编为大家准备的Python学习教程&#xff0c;课程主要讲解&#xff1a;Python核心编程、Linux基础、前端开发、Web开发、爬虫开发、人工智能等内容。 对于初学者想更轻松的学好Python开发&#xff0c;爬虫技术&#xff0c…

个人博客 HTML个人介绍网页 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

LeetCode刷题日记之栈与队列II

1.有效的括号 题目描述 解题思路 1.定义一个辅助栈stack来存放字符串&#xff0c;再定义一个以符号最为键、值的对象obj 2.循环遍历字符串&#xff0c;判断栈顶元素对应的key在obj中的值是否等于当前遍历值s[i]&#xff0c;如果等于则直接弹栈&#xff0c;不等于则将s[i]值推…

数据结构---判断链表是否有环

判断链表是否有环判断链表是否有环方法1方法2JAVA实现问题扩展1问题扩展2判断链表是否有环 有一个单向链表&#xff0c;链表中有可能出现“环”&#xff0c;就像下图这样。那么&#xff0c;如何用程序来判断该链表是否为有环链表呢&#xff1f; 方法1 创建一个以节点ID为Ke…

大数据Kudu(九):Spark操作Kudu

文章目录 Spark操作Kudu 一、​​​​​​​​​​​​​​添加Maven依赖

【DELM回归预测】基于灰狼算法改进深度学习极限学习机GWO-DELM实现数据回归预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

网络请求与数据提取-urllib库

关于网络爬虫&#xff0c;其实就是模拟浏览器向网站服务器发送请求&#xff0c;然后从响应的结果中提取出需要的数据。那么&#xff0c;该如何实现这一流程了&#xff1f;对于初学者来说&#xff0c;可能都不知道该如何入手&#xff0c;学习爬虫时需不需要了解HTTP、TCP、IP 层…

入门:环境安装与部署

容器技术入门 随着时代的发展&#xff0c;Docker也逐渐走上了历史舞台&#xff0c;曾经我们想要安装一套环境&#xff0c;需要花费一下午甚至一整天来配置和安装各个部分&#xff08;比如运行我们自己的SpringBoot应用程序&#xff0c;可能需要安装数据库、安装Redis、安装MQ等…

springboot常用语法库

今天与大家分享springboot常用语法库的基本语法。如果有问题&#xff0c;望大家指教。 目录 1. freemarker是什么 1.1 优点 2. springboot整合freemarker 2.1 pom.xml 2.2 项目配置文件 2.3 Controller 2.4 index.ftl 2.5 常用功能演示 1. freemarker是什么 FreeMarke…

OPENGL ES 2.0 知识串讲 (3)——SHADER的功能GLSL语法(I)

更多图形知识请关注我的公众号&#xff1a; 在第一节中,我们介绍过 OpenGL ES 与 GLSL 的主要功能,就是往绘制 buffer 上绘制图片。其中虽然 GLSL 制作的 shader 是穿插在 OpenGL ES 中使用,但是我们在流程中可以看出来,两大 shader(vertex shader 和 fragment shader)相对于 O…

大学毕业生就业信息管理平台

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 系统在功能设计充分利用信息化技术和互联网的优势&#xff0c;建立一个以浏览器为用户工作界面&#xff0c;实现跨 平台…