每日演算法-無重複字元的最長子串
阿新 • • 發佈:2021-08-20
題目描述
給定一個字串s
,請你找出其中不含有重複字元的 最長字串 的長度
示例1:
輸入:s = "abcabcbb"
輸出:3
解釋:無重複字元的最長字串是"abc",所以長度為3。
示例2:
輸入:s = "bbbbb"
輸出:1
解釋:無重複字元的最長字串是"b",長度為1。
示例3:
輸入:s = ""
輸出:0
解答詳情
思路:先理解清楚字串的子串和子陣列的概念,子串是連續的,子陣列可以不連續;該題本人根據ASCII碼,利用字元的ASCII碼記錄上一個字元出現的位置,若遇到相同的字元,則更新統計子串長度的起始位置,並記錄相應無重複字元子串的長度,獲取其最大值。
class Solution { public int lengthOfLongestSubstring(String s) { int len = s.length();//字串長度 if(len < 2) return len==1 ? 1 : 0; int[] preStrIdx = new int[128];//128位的ASCII碼 //利用字元的ASCII碼記錄上一個字元出現的位置 for(int i = 0 ; i < 128 ; i++)preStrIdx[i] = -1;//初始化 int res = 0; int start = 0; for(int i = 0 ; i < len ; i++){ int idx = s.charAt(i);//字元對應的ASCII碼 start = Math.max(start,preStrIdx[idx]+1);//記錄開始的位置 res = Math.max(res,i-start+1); preStrIdx[idx] = i;//更新上一個字元的位置 } return res; } }