leetcode-无重复字符的最长子串

问题源于力扣无重复字符的最长子串

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

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

解体思路:
我们要找的是字符不重复的最长的子串中的字符个数—即为子串的长度
首先我们要注意 我们要使用的是双指针的滑动窗口的算法 即首先定义一个指针start指向开始字符,后定义另一个指针end 指向下一个字符,当字符不重复的时候,我们将字符添加到set 中,并且继续向下寻找,我们可以使用的是set集合的contains方法判断是否出现了重复的字符,一旦有重复的字符出现时,我们就让首指针start向下移动到第一个重复字符的下一个位置,并且清除到重复字符之间的字符 ,之后end继续向后查找,重复这个过程, 我们在这个过程中取end-start的最大值即可

package Exercises;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class leetcode3 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        int max = lengthOfLongestSubstring(s);
        System.out.println(max);
    }
    public static int lengthOfLongestSubstring(String s) {
        int max=0;
        int length=s.length();
        Set<Character> set =new HashSet<>();
        int start=0;
        int end =0;
        while(start<length && end < length) {
            if (!set.contains(s.charAt(end))) {
                set.add(s.charAt(end));
                end++;
                max=Math.max(max,end-start);
            }else{
                while(s.charAt(start) !=s.charAt(end)) {
                    set.remove(s.charAt(start));
                    start++;
                }
                start ++;
                end++;
            }
        }
        return max;
    }
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值