- 1、题目描述:
-3、 设计思想:
详细操作流程看下图:
-4、视频讲解链接B站视频讲解
-5、代码:
c++版本:
class Solution
{
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr)
{
// write code here
set<int> se;//用来判断有没有重复的数字
int l = 0,r = 0;//定义两个双指针
int cnt = 1;//代表最长的无重复字符子串
while(l < arr.size() && r < arr.size())
{
if(se.find(arr[r]) == se.end())
{
//如果set里面不存在arr[r]就插入到set,并且更新cnt,r指针移动
se.insert(arr[r ++]);
cnt = max(cnt,r-l);
}
else
{
//如果set里面存在arr[r]就移动l指针,并且删除arr[l]
//因为是求子串,所以就得重新开始判断了
se.erase(arr[l ++]);
}
}
return cnt;
}
};
Java版本:
import java.util.*;
public class Solution {
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
public int maxLength (int[] arr) {
// write code here
HashSet<integer> se = new HashSet<>();//用来判断有没有重复的数字
int l = 0,r = 0;//定义两个双指针
int cnt = 1;//代表最长的无重复字符子串
while(l < arr.length && r < arr.length){
if(se.contains(arr[r]) == false){
//如果set里面不存在arr[r]就插入到set,并且更新cnt,r指针移动
se.add(arr[r++]);
cnt = Math.max(r-l,cnt);
}else{
//如果set里面存在arr[r]就移动l指针,并且删除arr[l]
//因为是求子串,所以就得重新开始判断了
se.remove(arr[l++]);
}
}
return cnt;
}
}
Python版本:
#
#
# @param arr int整型一维数组 the array
# @return int整型
#
class Solution:
def maxLength(self , arr ):
# write code here
cnt = 1#代表最长的无重复字符子串
l,r = 0,0 #定义两个双指针
se = set() #用来判断有没有重复的数字
while l < len(arr) and r < len(arr):
if arr[r] in se:
#如果set里面存在arr[r]就移动l指针,并且删除arr[l]
se.remove(arr[l])
l+=1
else:
#如果set里面不存在arr[r]就插入到set,并且更新cnt,r指针移动
se.add(arr[r])
r += 1
cnt = max(r - l,cnt)
return cntJavaScript版本:
/**
*
* @param arr int整型一维数组 the array
* @return int整型
*/
function maxLength( arr ) {
// write code here
let se = new Set();//用来判断有没有重复的数字
let l = 0,r = 0;//定义两个双指针
let cnt = 1;//代表最长的无重复字符子串
while(l < arr.length && r < arr.length){
if(se.has(arr[r]) == false){
//如果set里面不存在arr[r]就插入到set,并且更新cnt,r指针移动
se.add(arr[r++]);
cnt = Math.max(r-l,cnt);
}else{
//如果set里面存在arr[r]就移动l指针,并且删除arr[l]
//因为是求子串,所以就得重新开始判断了
se.delete(arr[l++]);
}
}
return cnt;
}
module.exports = {
maxLength : maxLength
};
京公网安备 11010502036488号