给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
解题思路:
双指针扫描,右指针往回扫描。
实现代码:
importjava.util.*;publicclassSolution{/***
paramarrint整型一维数组thearray*returnint整型*/publicintmaxLength(int[]arr){//writecodehereintlength=arr.length;if(length=0){return0;}if(length==1){return1;}intright=0;inttmp=0;intmaxLength=0;while(rightlength){intleft=right-1;//回头扫描,要是没有找到相同的,左指针一直倒退while(left=0arr[left]!=arr[right]){left--;}intt=right-left;/***暂时保存子串长度*若指针距离比上一个字符时拥有的子串长度大,就tmp+1*(因为每当右指针移动一位,只有可能比上次最大长度+1或不加1),*否则就设置为指针距离,方便下一步maxLength进行比较*/tmp=tmpt?(tmp+1):t;maxLength=Math.max(maxLength,tmp);//right指针往右移动right++;}returnmaxLength;}}预览时标签不可点收录于话题#个上一篇下一篇