求字符串最长不重复子串位数
map数组表示 某元素在此串中上一次出现的位置
flag 表示 找到重复元素后切断的位置
cur 表示当前最长子串
max 最长不重复子串位数
例如: 字符串 String: abcddafghi
在String[4] 重复
切断位置在 4 dafghi
#include <iostream>
#include <string>
#define Max 10000
using namespace std;
int Get_string(string a)
{
int map[256] = { 0 },cur=0,max=0,flag =0;
for (int i = 0; i < 256; i++)
{
map[i] = Max;//初始化
}
for (int i = 0; i < a.size(); i++)
{
if (i > map[a[i]] && map[a[i]] >= flag) //发现有重复
{
cur = 1;
flag = i;
map[a[i]] = i;
}
else //未重复
{
cur++;
map[a[i]] = i;
}
if (cur > max)max = cur;
}
return max;
}
int main()
{
string a;
cin >> a;
cout << Get_string(a);
}