首页 > 其他分享 >最长不重复子串

最长不重复子串

时间:2024-09-07 21:16:44浏览次数:7  
标签:子串 map charAt 重复 ans 最长

2、求最长不重复子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
class Solution {
    // 双指针算法
    // 1、定义两个指针,一个在前,一个在后,这个区间维护最长不重复距离
    // 2、通过map判断是否有重复,因为前指针无需回退,所以时间复杂度为o(n)
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character,Integer> map = new HashMap();
        int ans = 0;
        for (int i = 0,j = 0;i < s.length();i ++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
            while (map.get(s.charAt(i)) > 1 ) {               
                map.put(s.charAt(j),map.get(s.charAt(j)) - 1);
                j ++;
            }
            ans = Math.max(ans,i - j + 1);
        }
        return ans;
    }
}

标签:子串,map,charAt,重复,ans,最长
From: https://www.cnblogs.com/mybloger/p/18402144

相关文章

  • 1.有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?
    【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去#掉不满足条件的排列。#2.程序源代码:count=0results=[]foriinrange(1,5):forjinran......
  • 线性dp:LeetCode516 .最长回文子序列
    LeetCode516.最长回文子序列题目叙述:力扣题目链接(opensnewwindow)给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例1:输入:s="bbbab"输出:4解释:一个可能的......
  • 1143. 最长公共子序列(leetcode)
    https://leetcode.cn/problems/longest-common-subsequence/description/经典题,老题回顾classSolution{publicintlongestCommonSubsequence(Stringtext1,Stringtext2){//f[i][j]表示所有在第一个序列前i个数中选择,在第二个序列前j个数中选择得到的最长......
  • 718. 最长重复子数组(leetcode)
    https://leetcode.cn/problems/maximum-length-of-repeated-subarray/难点是在于状态定义,需要考虑到以第i个数为结尾,以第j个数为结尾的最长重复子数组这样的定义而递推就很简单,只需要发生重复时+1即可,和之前的一维的,即最长子数组一样classSolution{publicintfind......
  • 674. 最长连续递增序列(leetcode)
    https://leetcode.cn/problems/longest-continuous-increasing-subsequence/description/classSolution{publicintfindLengthOfLCIS(int[]nums){//f[i]表示以第i个数为结尾的最长连续递增序列//以倒数第2个数划分子集//f[i]=if(nums......
  • 300. 最长递增子序列(leetcode)
    https://leetcode.cn/problems/longest-increasing-subsequence/description/classSolution{publicintlengthOfLIS(int[]nums){//f[i]表示以第i个数为结尾的最长严格上升子序列//以倒数第二个数是多少来划分子集//f[i]=max(f[i-1],f[......
  • SQL 用SP检查两个表中否有内容重复
    SQL用SP检查两个表中否有内容重复ALTERPROCEDURE[dbo].[CheckDuplicateValues] @ShowTypeNVARCHAR(5),@Table1NVARCHAR(128),@Table2NVARCHAR(128),@FieldsNVARCHAR(MAX)ASBEGIN--构建动态SQL查询语句DECLARE@SqlQueryNVARCHAR(MAX) if......
  • 通过用例演示如何截取QString对象的子串
    在Qt中,QString类提供了mid()方法来截取子串。mid()方法接受两个参数:起始索引(包含)和长度(可选)。如果省略长度参数,则截取从起始索引到字符串末尾的所有字符。下面通过几个用例来演示如何使用mid()方法来截取QString对象的子串。用例1:截取从指定位置开始的子串#include<QStr......
  • JAVA学习-练习试用Java实现“删除有序数组中的重复项”
    问题:给你一个有序数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以......
  • 求出最长好子序列
    给你一个整数数组nums和一个非负整数k。如果一个整数序列seq满足在范围下标范围[0,seq.length-2]中存在不超过k个下标i满足seq[i]!=seq[i+1],那么我们称这个整数序列为好序列。请你返回nums中好子序列的最长长度1.动态规划dp[i][j]表示将把i作为序......