常考数据结构与算法:找到字符串的最长无重复字符子串
生活随笔
收集整理的這篇文章主要介紹了
常考数据结构与算法:找到字符串的最长无重复字符子串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
給定一個數組arr,返回arr的最長無的重復子串的長度(無重復指的是所有數字都不相同)。
?
示例1
輸入
[2,3,4,5]返回值
4示例2
輸入
[2,2,3,4,3]返回值
3?
方法一:暴力算法
? 數組中的每個元素都循環一遍。比較每次循環的結果。效率極低。
public class MaxLengthMe {public static void main(String[] args) {int[] arr = {1,2,3,1,1,2};MaxLengthMe maxLengthMe = new MaxLengthMe();System.out.println(maxLengthMe.maxLength(arr));}/**** @param arr int整型一維數組 the array* @return int整型*/public int maxLength (int[] arr) {int max = 0;int[] arrTemp = new int[arr.length];int index = 0;for (int i = 0; i < arr.length; i++) {index = 0;for (int j = i; j <arr.length ; j++) {if(!isEqual(arrTemp, index, arr[j])){index++;}else{break;}}if(index > max){max = index;}}return max;}private boolean isEqual(int[] arrTemp,int index, int compare){for (int i = 0; i < index; i++) {if(arrTemp[i] == compare){return true;}}arrTemp[index] = compare;return false;} }?
方法二: 雙指針
public class MaxLengthMe {public static void main(String[] args) {int[] arr = {1,2,1,3,4};MaxLengthMe maxLengthMe = new MaxLengthMe();System.out.println(maxLengthMe.maxLength(arr));}public int maxLength(int[] arr) {int maxLength = 0;int length = 0;int index = 0;int to = 0;int from = 0;//循環,每次增加一個元素,判斷該字符在之前的數組中是否已經存在,//存在,則將from變為存在的元素索引+1,不存在,則to索引自增1,判斷下一個元素while(to<arr.length){index = isEqual2(arr, from, to);if(-1 != index){// 有重復的length = to-from; // 無重復字符字串的長度// 1 2 3 4 5 4 6 7 8from = index+1; // 新的開始, 不用數組arr中每個元素if(maxLength < length){maxLength = length;}}else{to ++;}}// 處理最后一個子串if (to - from > maxLength) {maxLength = to - from;}return maxLength;}private int isEqual(int[] arr,int from, int to){for (int i = from; i < to; i++) {if(arr[i] == arr[to]){// 返回相等的位置return i;}}return -1;}}?
?
總結
以上是生活随笔為你收集整理的常考数据结构与算法:找到字符串的最长无重复字符子串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常考数据结构与算法:求二叉树的层序遍历
- 下一篇: 常考数据结构与算法:删除链表的倒数第n个