无重复字符的最长子串(并输出相应的最长子串)
Posted zhou753099943
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无重复字符的最长子串(并输出相应的最长子串)相关的知识,希望对你有一定的参考价值。
/*
* 给定一个字符串,请你找出其中不含有重复字符串的最长子串的长度,
* 新增一个附加条件:并输出相应的最长子串字符
*/
#include <unordered_set>
void testMaxChar()
{
//"abcabcbb"
//char *src="abcabcbb";
char *src="abcabcbbxyzwertoziabdcw";
// 官方答案
{
std::string s="abcabcbbxyzwertoziabdcw";
std::unordered_set<char> ooc;
int n = s.size();
int rk = -1;
int ans = 0;
for(int i = 0; i < n; ++i)
{
if (i != 0)
ooc.erase(s[i - 1]);
while (rk + 1 < n && !ooc.count(s[rk + 1])) {
ooc.insert(s[rk + 1]);
++rk;
}
ans = std::max(ans, rk -i + 1);
}
for(auto it : ooc)
std::cout<<it<<",";
std::cout<<" ans:"<<ans<<std::endl;
}
std::vector<char> vector;
std::vector<char> vector2;
while (*src != '\\0')
{
size_t i= 0;
bool find = false;
while(i < vector.size())
{
if (*src == vector[i])
{
find = true;
if (vector.size() > vector2.size())
{
vector2.clear();
vector2 = vector;
}
++i;
break;
}
++i;
}
if (i < vector.size())
{
std::vector<char> vector4;
for(;i < vector.size(); ++i)
vector4.push_back(vector[i]);
vector.clear();
vector = vector4;
}
else if (find && i >= vector.size())
vector.clear();
vector.push_back(*src);
src++;
}
std::vector<char> vector_result;
if (vector2.size() > vector.size())
vector_result = vector2;
else
vector_result = vector;
for(size_t i =0; i < vector_result.size(); ++i)
{
std::cout<<vector_result[i]<<",";
}
std::cout<<" size:"<<vector_result.size()<<std::endl;
}
以上是关于无重复字符的最长子串(并输出相应的最长子串)的主要内容,如果未能解决你的问题,请参考以下文章