class Solution:
def maxLength(self , arr: List[int]) -> int:
dic={} # 哈希表方法拿到各字符最后一次出现的索引位置
dp=res=0
for index,num in enumerate(arr):
i = dic.get(num,-1) # 拿到各字符最后一次出现的索引位置
j = index
dic[num]=j # 更新字符最后一次的下标
dp=dp+1 if dp<j-i else j-i # dp表示以arr[j]结尾的最长无重复子数组
res=max(dp,res)
return res
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int dp = 0; int res = 0; int i = 0;
for (int j = 0; j < s.size(); j++) {
i = j - 1;
while (i>=0&&s[i] != s[j])i--; // 线性遍历方法拿到最后一个字符出现位置
dp = (dp < j - i) ? dp + 1 : j - i;
res = max(dp, res);
}
return res;
}
};