Leetcode3.无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
题目思路:遍历一次暴力即可,用一个flag标记数组,边遍历边标记已经出现了的字符(注意不是字母),当出现重复字符,则取消该重复字符前面的字符的标记,然后与max变量进行比较。是一道水题
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int flag[500] = { 0 };//标记数组
int al = 0;
int max = 0;//存储最大长度
int l=s.length();
if(l==1)return 1;
for (int i = 0; i < l; i++) {
if (flag[s[i]]) {
max = max < al ? al : max;//比较最大长度
int j = i - al;
for (; j <= i; j++) {
if (s[j] == s[i]) {
break;
}
else {
flag[s[j]] = 0;//清除重复字符前面的字符标记
}
}
al =al-( j-(i-al));//计算当前不重复字符的长度
}
else {
flag[s[i]] = 1;//标记
al++;
}
}
max = max < al ? al : max;//比较最大长度
return max;
}
};