力扣LeatCode算法题第三题-无重复字符的最长子串

news2025/8/7 7:49:36

要求:

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

 

我一开始采用的第一种方法是使用hashmap去比对大小,在idea上可以跑通程序,但在leatcode的编译器中,无法通过字符串s="" 和s=" "的校验,很奇怪。

package com.zhm.test;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author bige
 * @Date: 2022/11/18 8:39
 * @ApiNote: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
 */
public class Leatcode_test003 {
    public static int lengthOfLongestSubstring(String s) {
        //每一道算法题,先想出解题思路。
        //1.判空
        //2.思路想法。
        // 2.1.可以使用hashMap<int,String>类型
        // 2.2 key作为索引下标0,1,2,3.   每个字母作为value
        // 2.3 循环比对所有的value,返回key. 求出key的差值大小=length。

        Map<Integer,String> stringHashMap = new HashMap<Integer, String>();
        int max = 0;
        String[] split = s.split("");
        for (int i = 0; i < split.length; i++) {
            stringHashMap.put(i,split[i]);
        }

        if(split.length<1){
            max=0;
        }else if(split.length==1){
            max=1;
        }else{
            for (Map.Entry<Integer, String> entry : stringHashMap.entrySet()) {
                for (int j = entry.getKey()+1; j < split.length; j++) {
                    if(entry.getValue().equals(split[j])){
                        max=(max < (j - entry.getKey()) ) ? (max = (j - entry.getKey())) : max;
                        break;
                    }
                }
            }
        }
    return max;
    }

    public static void main(String[] args){
        String s = " ";
        System.out.println("max="+lengthOfLongestSubstring(s));
    }
}

可以在idea中输出正确的结果。

尝试使用下第二种方法去验证。

利用String本身的方法去进行调用和判断,利用indexOf()方法,可以进行返回首次出现的下标。

public static int lengthOfLongestSubstring(String s) {
        int index=0;//索引
        int des=0;//差值
        for (int i = 0; i < s.length(); i++) {
            if(s.indexOf(s.charAt(i),index) < i){
                index=s.indexOf(s.charAt(i),index)+1;
            }else {
                //des=Math.max( des, i - index + 1);
                des=des>(i-index+1)?des :(i-index+1);
            }
        }
        return des;
    }

代码解析:

1.进入if的唯一条件是出现了同样的字母。

例如测试数据:

String s = "abcabcbb";

首次出现:int index=0;

再次出现:int lastIndex =3;

但由于我们使用的IndexOf()方法,再次出现的a字母,会导致索引返回第一次出现字母a的索引index=0。 所以才能进入到if的判断语句中。

if()方法中,+1的作用是因为每再次遇到相同字母就+1.

比如测试数据:

String s1 = "cacccc";

首次c的索引=0,index=0;

第二次遇到c的索引=2,index=1;

第三次遇到c的索引=3,index=2;

第三次遇到c的索引=4,index=3;

第三次遇到c的索引=5,index=4;

主要是防止重头开始索引,需要移动下标。

贴上所有代码,可以在idea中进行数据测试。

package com.zhm.test;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author bige
 * @Date: 2022/11/18 8:39
 * @ApiNote: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
 */
public class Leatcode_test003 {
    public static int lengthOfLongestSubstring1(String s) {
        //每一道算法题,先想出解题思路。
        //1.判空
        //2.思路想法。
        // 2.1.可以使用hashMap<int,String>类型
        // 2.2 key作为索引下标0,1,2,3.   每个字母作为value
        // 2.3 循环比对所有的value,返回key. 求出key的差值大小=length。

        Map<Integer,String> stringHashMap = new HashMap<Integer, String>();
        int max = 0;
        String[] split = s.split("");
        for (int i = 0; i < split.length; i++) {
            stringHashMap.put(i,split[i]);
        }

        if(split.length<1){
            max=0;
        }else if(split.length==1){
            max=1;
        }else{
            for (Map.Entry<Integer, String> entry : stringHashMap.entrySet()) {
                for (int j = entry.getKey()+1; j < split.length; j++) {
                    if(entry.getValue().equals(split[j])){
                        max=(max < (j - entry.getKey()) ) ? (max = (j - entry.getKey())) : max;
                        break;
                    }
                }
            }
        }
    return max;
    }

    public static int lengthOfLongestSubstring(String s) {
        int index=0;//索引
        int des=0;//差值
        for (int i = 0; i < s.length(); i++) {
            if(s.indexOf(s.charAt(i),index) < i){
                index=s.indexOf(s.charAt(i),index)+1;
            }else {
                //des=Math.max( des, i - index + 1);
                des=des>(i-index+1)?des :(i-index+1);
            }
        }
        return des;
    }

    public static void main(String[] args){
        String s = "abcabcbb";
        String s1 = "cccccc";
        System.out.println("length="+s.length());
        System.out.println("max="+lengthOfLongestSubstring(s));
    }
}

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

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

相关文章

苹果推送和开发证书更新

1.背景 推送证书&#xff08;生产Apple Push Services和开发APNs Development iOS&#xff09;的有效期都是一年&#xff0c;将要过期的时候&#xff0c;苹果官方会发邮件提醒。 2.csr和推送证书更新 打开mac电脑&#xff0c;找到启动台-->其他&#xff0c;打开钥匙串访问。…

uni-app入门:WXML数据绑定

1.简单数据绑定 2.组件属性数据绑定 3.运算绑定 3.1三元运算符 3.2算数运算 3.3字符串拼接运算 3.4逻辑判断运算 正文 WXML全称&#xff1a;wexin markup language,微信标签语言&#xff0c;可以理解为web中的html&#xff0c;…

JavaEE之HTTP协议 Ⅱ

文章目录一、认识请求"报头"(header)1.HOST2.Content-Length3.Content-Type4.User-Agent (简称 UA)5.Referer4.Cookie二、HTTP响应详解1. 认识"状态码"(status code)2. Content-Type3. 如何构造HTTP请求总结一、认识请求"报头"(header) 这里的键…

php资源列表|开发者应知晓

PHP PSR 代码标准 官网: https://www.php-fig.org原文: https://github.com/php-fig/fi...中文: https://psr.phphub.orgPHP资源列表PHP设计模式PHP知识技能树PHP资源站 PHP WeeklyCodeVisuallyPHP LeagueKnpLabs开发项目 FastAdmin - 基于 ThinkPHP5 + Bootstrap 的极速后台开…

ubuntu搭建Elasticsearch过程与问题

目录 一.下载Elasticsearh 二.解压 创建需要的文件目录 三.修改配置文件 四.遇到的问题 1.root账号启动问题 2.创建文件不授权切换到非root用户test的时候报错 3.启动最后还是报错 4.浏览器请求http://localhost:9200 报错&#xff1a;received plaintext http traffic…

【python】算法与数据结构作业记录分析

目录 算法与数据结构实验题 9.21 朋友圈 ★实验任务 ★数据输入 ★数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题 9.24 水杯 ★实验任务 ★数据输入 ★数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题 9.21 朋友圈 …

实验(四):LCD1602显示实验

一、实验目的与任务 实验目的&#xff1a; 1. 掌握LCD1602显示控制方法&#xff1b; 2. 掌握利用Proteus进行单片机控制系统的仿真及调试方法。 3. 掌握单片机开发板的使用。 任务&#xff1a; 1.根据要求编写程序&#xff0c;并写出原理性注释&#xff1b; 2. 将检查程序运行的…

Java入门项目——读书管理系统

Java简单实现读书管理系统一、前言二、思路及整体框架三、代码展示1.有关读书包&#xff08;Book&#xff09;2.有关用户包3.有关操作书的包一、前言 相信有很多小伙伴学习完了【JavaSE】基础语法&#xff0c;想知道自己到底学的怎么样&#xff0c;或则学完不知道这么把知识点…

JavaFX之Scene Builder的使用(开发一款GUI小工具原来这么简单)

文章目录一、前言二、JavaFX与Scene Builder下载三、Scene Builder的使用四、详细教学&#xff08;示例&#xff09;4.1 环境配置4.2 创建fxml文件以及Controller类文件4.3 自定义界面4.4 运行我们的程序五、拓展总结博主个人社区&#xff1a;开发与算法学习社区 博主个人主页&…

创建.gitignore文件并使用

创建 .gitignore文件 第一种方式 在项目根目录下直接创建一个文件&#xff0c;后缀改成 .gitignore 即可。 第二种方式 用git创建&#xff0c;到根目录下&#xff0c;执行 touch .gitignore&#xff0c;即可看见目录下已经出现了该忽略文件。 添加忽略规则 # 忽略所有以 …

httpOnly对于抵御Session劫持的个人小结

Ⅰ 什么是http only?起到什么防护作用&#xff1f; cookie中设置了HttpOnly属性&#xff0c;那么通过js脚本将无法读取到cookie信息&#xff0c;主要防护的攻击手段&#xff1a;XSS不能通过document对象直接获取cookie Ⅱ 怎么绕过http only的防护&#xff08;三种&#xff…

5、CSS——三种样式和样式优先级、CSS中颜色设置方式、标签选择器和基本选择器的优先级

目录 一、行内样式 二、内部样式 三、外部样式 1、创建外部样式步骤 2、引入外部样式的两种方式 2.1 第一种 2.2 第二种 3、style标签内的注释符号 四、样式优先级 五、CSS中颜色设置方式 1、使用颜色的英文单词 2、使用十六进制表示法 3、使用rgb()表示法…

Redis分区/分片详解

分区/分片详解 分区是分割数据到多个Redis实例的处理过程&#xff0c;因此每个实例只保存key的一个子集。 如果只使用一个redis实例时&#xff0c;其中保存了服务器中全部的缓存数据&#xff0c;这样会有很大风险&#xff0c;如果单台redis服务宕机了将会影响到整个服务。解决的…

easyExcel不同版本按照模板导出

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都是在内存中完成的…

力扣(LeetCode)7. 整数反转(C++)

模拟 整数反转&#xff0c;需要一个中间变量 ansansans &#xff0c; 循环存入 xxx 的最低位 x%10x\%10x%10&#xff0c; 然后 xx/10x x/10xx/10 &#xff0c;得到 xxx 新的最低位 。如果进入新的循环&#xff0c;ans10ans\times 10ans10 &#xff0c;让上一次的 ansansans 十…

Makefile 基础(一) —— 自定义变量、预定义变量、自动变量

目录 一、自定义变量 1、定义变量 2、使用变量 3、修改变量的值 二、预定义变量 三、自动变量 一、自定义变量 1、定义变量 变量定义有两种方式&#xff0c;一种会在使用的时候递归展开&#xff0c;一种是直接赋值。两种定义方式如下&#xff1a; 递归展开&#xff1a…

Servlet的基本使用

目录 一、Servlet是什么 二、Servlet的基本使用 1、创建项目 2、引入依赖 3、创建目录 4、编写代码 5、打包程序 6、部署程序 7、验证程序 三、优化部署方式 1、安装Smart Tomcat 2、使用Smart Tomcat 四、使用Servlet时常见的错误 1、404 2、405 3、500 4、…

Linux文件目录之查看篇【cat、more、less、head、tail、>、>>】【简直不要太详细】

目录cat 查看文件内容morelessecho&#xff1a;将输入内容到控制台>指令和>>指令&#xff1a; >输出重定向 &#xff0c;>>追加head:tailcat 查看文件内容 cat【选项】 【要查看的文件】 -n 显示行号 注意&#xff1a;cat只能浏览文件&#xff0c;并不能修…

第二章--应用层

2.1应用层协议原理 研发网络应用程序的核心是写出能够运行在不同的端系统和同构网络彼此通信的程序&#xff0c;将应用软件限制在端系统&#xff0c;从而促进大量的网络应用程序的迅速研发和部署。 2.1.1网络应用程序体系结构 应用程序的体系不同于网络的体系结构&#xff0c…

实验(二):单片机数据区传送程序设计

一、实验目的与任务 实验目的&#xff1a; 1. 掌握单片机C语言程序设计和调试方法&#xff1b; 2. 了解单片机RAM中的数据操作。 任务&#xff1a; 1.根据要求编写程序&#xff0c;并写出原理性注释&#xff1b; 2. 检查程序运行的结果&#xff0c;分析一下是否正确&#xff1…