48. 最长不含重复字符的子字符串

题目描述

输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。

解题思路

  1. public int longestSubStringWithoutDuplication(String str) {
  2. int curLen = 0;
  3. int maxLen = 0;
  4. int[] preIndexs = new int[26];
  5. Arrays.fill(preIndexs, -1);
  6. for (int curI = 0; curI < str.length(); curI++) {
  7. int c = str.charAt(curI) - 'a';
  8. int preI = preIndexs[c];
  9. if (preI == -1 || curI - preI > curLen) {
  10. curLen++;
  11. } else {
  12. maxLen = Math.max(maxLen, curLen);
  13. curLen = curI - preI;
  14. }
  15. preIndexs[c] = curI;
  16. }
  17. maxLen = Math.max(maxLen, curLen);
  18. return maxLen;
  19. }

48. 最长不含重复字符的子字符串 - 图1