最长不含重复字符的子字符串(C++)
最长不含重复字符的子字符串
描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
数据范围: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++)相关推荐
- 字符串左侧补0_(48)C++面试之最长不含重复字符的子字符串(动态规划)
// 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #inclu ...
- 【LeetCode】剑指 Offer 48. 最长不含重复字符的子字符串
[LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 文章目录 [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 package offer;import ...
- 求最长不含重复字符的子字符串——C++
声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 一.原题描述 剑指 Offer 48. 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串 ...
- 面试题48:最长不含重复字符的子字符串
目录 1.动态规划 2.滑动数组 1.动态规划 先来分析一下吧...这题我们很容易想到,假设f(i)表示以下标i结尾的s[i]中的最长不含重复字符的子字符串,那么f(i)=f(i-1)+1是不是很容易 ...
- 【剑指Offer打卡】48. 最长不含重复字符的子字符串
剑指 Offer 48.最长不含重复字符的子字符串 JavaScript剑指Offer题解
- 【字符串】最长不含重复字符的子字符串
1. 题目描述 题目链接:最长不含重复字符的子字符串 2. 题目分析 我们可以看到,题目要求我们求在一个区间内不含有重复的字符串,这种区间,我们第一时间应该想到滑动窗口. 这个题目的巧妙在于:我们利用 ...
- 剑指offer48-最长不含重复字符的子字符串(双指针经典)
问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 ...
- 最长不含重复字符的子字符串
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 【剑指offer】最长不含重复字符的子字符串
题目: * 面试题48:请从字符串中找出一个最长的不包含重复字符的子字符串, * 计算该最长子字符串的长度.假设字符串中只包含从'a'到'z'的字符. * 例如,在字符串中'arabcacfr',最长 ...
最新文章
- 关于前后端分离我的理解
- Transformer Family
- restful是什么php,什么是RESTful?
- Python的构造函数和析构函数,对象和类的不一样
- uniapp添加网站favicon文件
- 作者:丁伟(1972-),男,博士,中国联合网络通信有限公司网络技术研究院高级工程师。...
- 【Flink】Flink消费kafka 突然报错 Kafka09PartitionDiscoverer.getAllPartitionsForTopics
- cad在线转低版本_为什么别人CAD绘图总是比你快?因为他早就偷偷掌握了这几个技巧...
- 【Java】equals源码分析
- 上海电力学院计算机组成与结构试卷,上海电力学院试卷及成绩管理办法
- 关于PHP SESSION
- ToolBox系列工具之Detector
- 计算机机房使用多大的光纤引入,弱电施工如何确定光纤使用的芯数
- 基于米思齐的电磁炮基础代码
- Python 数据科学入门教程:Pandas
- 华人的旗帜——首位亚裔图灵奖获得者姚期智
- 为什么我的背景图片加载不出来
- 10年,从一个月薪2500的设备维修工,迫于压力转行,直到成为自动化测试专家···
- 阿里云大数据ACA认证考试总结
- 艾默生质量流量计调试