给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
思路: 该题是对双指针的使用, 设置l, r 每次移动一格r 并且保证l - r之间的字符只出现过一下
字符的统计可以使用桶排序.
代码
#include <bits/stdc++.h>
using namespace std;
int sum[100];
int main()
{
string s;
cin >> s;
int l = 0, r = -1;
int ans = 1;
for (int r = 0; r < s.size(); r++)
{
sum[s[r] - '0']++;
if(sum[s[r] - '0'] > 1)
{
while(sum[s[l] - '0'] >= 1)
{
sum[s[l] - '0']--;
l++;
if(sum[s[l - 1] - '0'])
{
break;
}
}
}
cout << "l = " << l << " r = " << r << endl;
ans = max(ans, r - l + 1);
}
cout << ans;
}
运行结果