- 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 cnt
JavaScript版本:
/** * * @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 };