大概是只仓鼠 2024-02-20 15:17 采纳率: 76.3%
浏览 6
已结题

求无重复字符的最长子串的一个解的JAVA代码解释


class Solution {
    public int lengthOfLongestSubstring(String s) {
      int[] hash = new int[128];
        int ans = 0, prev = 0, i = 0;
        for (char c : s.toCharArray()) ans = Math.max(ans, -(prev = Math.max(prev, hash[c])) + (hash[c] = ++i));
        return ans;
    }
}

LEETCODE的题目,求无重复字符的最长子串的一个解,能否详细解释一下其中这段代码?没看明白。


      for (char c : s.toCharArray()) ans = Math.max(ans, -(prev = Math.max(prev, hash[c])) + (hash[c] = ++i));
  • 写回答

4条回答 默认 最新

  • 爱笑的笑笑 2024-02-20 15:37
    关注

    它的实现使用了一个长度为128的数组hash来存储字符出现的位置,prev表示当前不重复子串的起始位置,i表示当前遍历到的字符位置。
    在循环遍历字符串s的过程中,通过更新hash数组中字符的位置信息,可以计算出以当前字符结尾的最长不重复子串的长度,并不断更新ans变量保存最大长度。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月14日
  • 创建了问题 2月20日