首页 > 其他分享 >哈希表:剑指 Offer 48. 最长不含重复字符的子字符串

哈希表:剑指 Offer 48. 最长不含重复字符的子字符串

时间:2023-04-12 15:44:24浏览次数:47  
标签:map 48 Offer max start 哈希 字符 字符串

题目描述:

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

 

 

 

提示:

  • s.length <= 40000

 

思路:

双指针(滑动窗口) + 哈希表:

 

 

 

复杂度分析:
  时间复杂度 O(N) : 其中 N 为字符串长度,动态规划需遍历计算 dp 列表。
  空间复杂度 O(1) : 字符的 ASCII 码范围为 00 ~ 127 ,哈希表 dic 最多使用 O(128) = O(1)大小的额外空间。

 

 

 

class Solution{
    public int lengthOfLongestSubstring(String s){
        if(s==null) return 0;//这句话不加,s.length()长度为0时,不进入下面的循环,会直接返回max=0;
        //划定当前窗口的坐标为(start,i],左开右闭,所以start的初始值为-1,而非0。
        int max=0,start = -1;
        //使用哈希表map统计各字符最后一次出现的索引位置
        HashMap<Character,Integer> map = new HashMap<>();
        for(int i=0;i<s.length();i++){
            char tmp = s.charAt(i);

            //当字符在map中已经存储时,需要判断其索引值index和当前窗口start的大小以确定是否需要对start进行更新:
            //当index>start时,start更新为当前的index,否则保持不变。
            //注意若index作为新的start,计算当前滑动空间的长度时也是不计入的,左开右闭,右侧s[i]会计入,这样也是防止字符的重复计入。
            if(map.containsKey(tmp)) start = Math.max(start,map.get(tmp));

            //如果map中不含tmp,此处是在map中新增一个键值对,否则是对原有的键值对进行更新
            map.put(tmp,i);

            //i-start,为当前滑动空间(start,i]的长度,若其大于max,则需要进行更新。
            max = Math.max(max,i-start);
        }
        return max;
    }
}

 

 

 

 

 

 

 

 

Java HashMap 方法

 

标签:map,48,Offer,max,start,哈希,字符,字符串
From: https://www.cnblogs.com/zhz123567/p/17310052.html

相关文章

  • LeetCode #448 找到所有数组中消失的数字
    基本思路为了满足题目要求的不使用额外的存储空间(当然返回的数组除外),并且时间复杂度控制在O(n),最多只能常数级别遍历,因此考虑将原数组视作一个"哈希表"。遍历原数组,将【1,n】上的值域映射到【0,n-】的坐标上,某个数x扫描到一次则将这个数x映射的x-1的坐标处的值加上n。......
  • LeetCode #485 最大连续 1 的个数
    解题思路基础题,最后加一个特殊情况处理就好,时间复杂度O(n)代码  classSolution{public:intfindMaxConsecutiveOnes(vector<int>&nums){intcount=0;intMaxcount=0;for(inti=0;i<nums.size();i++){if(nums[i]==1){......
  • UVa 489 Hangman Judge (模拟&字符串匹配)
    489-HangmanJudgeTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=430In``HangmanJudge,''youaretowriteaprogramthatjudgesaseriesofH......
  • 【剑指 Offer】 65. 不用加减乘除做加法
    【题目】写一个函数,求两个整数之和,要求在函数体内不得使用“+”、“-”、“*”、“/”四则运算符号。 示例:输入:a=1,b=1输出:2 提示:   a,b均可能是负数或0   结果不会溢出32位整数来源:力扣(LeetCode)链接:https://leetcode.cn/problems/bu-yong-jia-jian-c......
  • 哈希表:剑指 Offer 03. 数组中重复的数字
    题目描述:找出数组中重复的数字。在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。   限制:2<=n<=100000 哈希表/Set利用数据......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-场景问题智能生成从0到1快速入门——官网推荐
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-智能多功能学习机从0到1快速入门——官网推荐
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-智能评论创建从0到1快速入门——官网推荐的48
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • windows 11 联想thinkpad T480S 蓝牙突然没了 设置管理中多了请求usb设备描述符失败代
    选中usb设备描述符失败代码43比如下面的,因为已经好了,所以没有截图了卸载它针对usb设备描述符失败代码这个去选中,以下只是示例重新扫描就有了......
  • 堆:剑指 Offer 41. 数据流中的中位数
    题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是3[2,3]的中位数是(2+3)/2=2.5设计一......