最长不含重复字符的子字符串

描述

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

数据范围:s.length≤40000

示例1

输入:
"abcabcbb"
返回值:
3
说明:
因为无重复字符的最长子串是"abc",所以其长度为 3。

示例2

输入:
"bbbbb"
返回值:
1
说明:
因为无重复字符的最长子串是"b",所以其长度为 1。

示例3

输入:
"pwwkew"
返回值:
3
说明:
因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。

思路/解法

方式一

每一个字符都比较与该字符前面字符是否重复,相同则更新起始标记位,同时每遍历一个字符都要获取当前的最长子字符串。

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @return int整型*/int lengthOfLongestSubstring(string s) {// write code hereif (s.size() == 0) {return 0;}int max = 1, begin = 0;for (int i = 0; i < s.size(); i++) {for (int j = begin; j < i; j++) {if (s[j] == s[i]) {begin = j + 1;}}if (i - begin + 1 > max) {max += 1;}}return max;}
};

方式二

用一个容器存储字符的位置所在,同时设置两个标记位,分别指向当前不重复子字符串的起始位置以及当前遍历位置。遍历字符串的时候,如果发现之前出现过该字符,那么应该更新起始标记位,而且其实标记位必须在该重复字符的后一位置(注意,起始位置只能前进,不能往后退,所以需要判断一下大小),最后通过res获取整个字符串的最大子字符串。

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param s string字符串 * @return int整型*/int lengthOfLongestSubstring(string s) {if(s == " " || s.length() == 1)return 1;if(s.empty())return 0;vector<int> visited(4000,0);int res = -1;int start = 0,end = 1;while(end < s.length()){if(s[start] == s[end])start++;else if(visited[s[end]] != 0){if(start < visited[s[end]]+1)start = visited[s[end]] + 1;}visited[s[end]] = end; end++;if(end - start > res)res = end - start;}return res;}
};

最长不含重复字符的子字符串(C++)相关推荐

  1. 字符串左侧补0_(48)C++面试之最长不含重复字符的子字符串(动态规划)

    // 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #inclu ...

  2. 【LeetCode】剑指 Offer 48. 最长不含重复字符的子字符串

    [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 文章目录 [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 package offer;import ...

  3. 求最长不含重复字符的子字符串——C++

    声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 一.原题描述 剑指 Offer 48. 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串 ...

  4. 面试题48:最长不含重复字符的子字符串

    目录 1.动态规划 2.滑动数组 1.动态规划 先来分析一下吧...这题我们很容易想到,假设f(i)表示以下标i结尾的s[i]中的最长不含重复字符的子字符串,那么f(i)=f(i-1)+1是不是很容易 ...

  5. 【剑指Offer打卡】48. 最长不含重复字符的子字符串

    剑指 Offer 48.最长不含重复字符的子字符串 JavaScript剑指Offer题解

  6. 【字符串】最长不含重复字符的子字符串

    1. 题目描述 题目链接:最长不含重复字符的子字符串 2. 题目分析 我们可以看到,题目要求我们求在一个区间内不含有重复的字符串,这种区间,我们第一时间应该想到滑动窗口. 这个题目的巧妙在于:我们利用 ...

  7. 剑指offer48-最长不含重复字符的子字符串(双指针经典)

    问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 ...

  8. 最长不含重复字符的子字符串

    请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  9. 【剑指offer】最长不含重复字符的子字符串

    题目: * 面试题48:请从字符串中找出一个最长的不包含重复字符的子字符串, * 计算该最长子字符串的长度.假设字符串中只包含从'a'到'z'的字符. * 例如,在字符串中'arabcacfr',最长 ...

最新文章

  1. 关于前后端分离我的理解
  2. Transformer Family
  3. restful是什么php,什么是RESTful?
  4. Python的构造函数和析构函数,对象和类的不一样
  5. uniapp添加网站favicon文件
  6. 作者:丁伟(1972-),男,博士,中国联合网络通信有限公司网络技术研究院高级工程师。...
  7. 【Flink】Flink消费kafka 突然报错 Kafka09PartitionDiscoverer.getAllPartitionsForTopics
  8. cad在线转低版本_为什么别人CAD绘图总是比你快?因为他早就偷偷掌握了这几个技巧...
  9. 【Java】equals源码分析
  10. 上海电力学院计算机组成与结构试卷,上海电力学院试卷及成绩管理办法
  11. 关于PHP SESSION
  12. ToolBox系列工具之Detector
  13. 计算机机房使用多大的光纤引入,弱电施工如何确定光纤使用的芯数
  14. 基于米思齐的电磁炮基础代码
  15. Python 数据科学入门教程:Pandas
  16. 华人的旗帜——首位亚裔图灵奖获得者姚期智
  17. 为什么我的背景图片加载不出来
  18. 10年,从一个月薪2500的设备维修工,迫于压力转行,直到成为自动化测试专家···
  19. 阿里云大数据ACA认证考试总结
  20. 艾默生质量流量计调试

热门文章

  1. 2.3、云计算FusionCompute存储虚拟化
  2. 主数据管理(MDM)的一些概念
  3. O2O口号容易运营难
  4. EVG实现芯片到晶圆的融合和混合键合
  5. 日常小工具向excel中批量添加图片和图片名称
  6. 微服务中的服务发现是什么?
  7. 计算机使用技巧大全 书,总算明白电脑使用技巧大全
  8. 科创人·知乎CTO李大海:技术服务内容、商业化依赖内容,曾被「呵呵」难到挠头
  9. AndroidStudio模拟器全面屏皮肤
  10. javaSwing ATM