- 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
if (n == 0)
{
return 0;
}
int ans = 1;
int j = 0;//右指针
for (int i = 0; i < n-1; i++)//到倒数第二位即可
{
string s1 = s.substr(i, j-i+1); //规定一个字符串为不重复的字符串
j++;//右指针,为左指针的下一位
while(j < n)
{
int x = s1.find(s[j]);//在不重复字符串中当前字符串是否满足字符串不重复的要求
if (s1.find(s[j]) != -1)//如果找到返回对应的下标,找不到则返回-1
{
i = x+i ;//找到了,那么左指针应该从那个下标的下一位开始
break;
}
else
{
s1 = s1 + s[j];//没有相等的,就把这个字符加上
j++;
}
}
ans = (ans > s1.size()) ? ans : s1.size();
}
return ans;
}
};
比答案更快的原因在于左指针不是按部就班的左移一位,因为在右指针找到与前面字符串有相同的一位的时候,那么左指针再往前面移一位是没有意义的,因为这个时候以左指针为起始的和右指针结尾的还是有重复的,所以直接把左指针移到和右指针相等的下标的下一位