题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例1
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
示例 4:
输入: s = ""
输出: 0
解题思路
利用STL的容器,查看容器内是否存在该值,如果有,先判断当前容器的大小, 然后从开始的迭代器到当前迭代器的值清除.
解题过程:
#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include<algorithm>
int main()
{
string s = "";
vector<char> b;
int max = 0;
for (int i = 0; i < s.size(); i++)
{
vector<char>::iterator it = find(b.begin(),b.end(),s[i]); //判断是否存在该值
if (it == b.end())
{
b.insert(b.end(), s[i]);
}
else
{
it++;
if (max < b.size())
{
max = b.size();
}
b.erase(b.begin(), it); //清除开始到找到的值的迭代器位置
b.insert(b.end(), s[i]); //把当前重复的值再插入
}
}
if (max < b.size())
{
max = b.size(); //防止只有一个值,或者最后一个值插入后不判断
}
cout << max;
return 0;
}
运行结果:
总结:
萌新第一次写博客和刷leetcode,目的是锻炼自己markdown和算法能力.这个题虽然用到了STL,时间复杂度可能有点高,但是是自己一个个码出来的还是很开心.