leetcode题解#3:无重复字符的最长子串
Posted linkcxt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode题解#3:无重复字符的最长子串相关的知识,希望对你有一定的参考价值。
题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
思路
-
构造子串的首尾指针。
-
判断子串是否重复的方法:利用string的
find_first_of
方法,传入子串的最后一个字符,当返回的下标非子串的长度,即end-begin
,则表明已经重复。 -
若重复:则判断长度,比当前记录的最大值大,则覆盖,并重置首尾指针。
-
不重复:则尾指针++,继续判断下一个字符。
-
循环出口判断条件尾末尾指针大于原字符串长度。
-
其中字符串的赋值利用了string的assign方法,注意传入的第三个参数是子串长度,而不是末尾下标。
代码
class Solution { public: int lengthOfLongestSubstring(string s) { int max=0,begin=0,end=1; // 初始化参数 string temp; // 存储子串 temp.assign(s,begin,end-begin+1); // assign(string,begin,count); 初始化 while(end <= s.length()){ // 出口,末尾指针超出范围 if(temp.find_first_of(s[end]) != (end-begin) ){ // 重复判定 if((end-begin) > max) // 判断长度 max = (end-begin); begin = begin +1; // 重新开始 end = begin +1; }else{ end++; // 增加长度 } temp.assign(s,begin,end-begin+1); // 继续赋值 } return max; } };
以上是关于leetcode题解#3:无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章