题目链接

无重复字符的最长子串

题目描述

image.png

实现代码

思路:采用一个滑动窗口(即数组)用来保存当前的最长无重复子串,然后每次遍历都把当前位置的字符与滑动窗口进行比较并且更新滑动窗口,需要维护滑动窗口的startIdx和realLen,实现代码如下:

  1. class Solution {
  2. public int lengthOfLongestSubstring(String s) {
  3. int len = s.length();
  4. if(len < 2) {
  5. return len;
  6. }
  7. char[] chars = new char[len];
  8. int startIdx = 0;
  9. int realLen = 0;
  10. chars[0] = s.charAt(0);
  11. realLen = 1;
  12. int maxLen = 1;
  13. for (int i = 1; i < len; i++) {
  14. char c = s.charAt(i);
  15. boolean isSwap = false;
  16. for(int j=startIdx; j<realLen + startIdx; j++) {
  17. if(c == chars[j]) {
  18. realLen -= j - startIdx + 1;
  19. startIdx = j+1;
  20. isSwap = true;
  21. break;
  22. }
  23. }
  24. chars[realLen+startIdx] = c;
  25. realLen++;
  26. if(!isSwap) {
  27. maxLen = Math.max(maxLen, realLen);
  28. }
  29. }
  30. return maxLen;
  31. }
  32. }