美文网首页
LeetCode 解题报告 - 3. Longest Subst

LeetCode 解题报告 - 3. Longest Subst

作者: 秋名山菜车手 | 来源:发表于2016-10-09 15:17 被阅读0次

    从今天开始,写一下我在刷 LeetCode 时的心得体会,包括自己的思路和别人的优秀思路,欢迎各种监督啊! 2016/10/9
    编程语言是 Java,代码托管在我的 GitHub 上,包括测试用例。欢迎各种批评指正!

    <br />

    题目 —— Two Sum

    Given a string, find the length of the longest substring without repeating characters.

    Examples:
    Given "abcabcbb", the answer is "abc", which the length is 3.
    Given "bbbbb", the answer is "b", with the length of 1.
    Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

    <br >

    解答

    • 题目大意
      给出一个字符串,找到不含重复字符的最长字串。

    • 解题思路
      最开始看到这个题,我觉得很简单!采用了最简单的遍历字符串,放到一个 map 中,key 值为字符串,value 值为长度,最后遍历 map 比较 value 的大小然后输出。结果发现错了,又重新审题,看到是 substring,才恍然大悟。
      看到标签的 Two Pointers 迟迟无法下手,然后就采用了其他同学的思路,最开始还是没有看明白的啊啊啊。有点绕。下面让我通过几个问题来分析一下。

      • 第一个问题,怎么表示子串呢?这里就可以联想到两个指针,慢指针指向子串的头部,快指针指向子串的尾部。
      • 第二个问题,怎么存储子串呢?题目要求,不含重复字符,我们可以联想到 Set。进一步,我们使用 HashSet 就够了,把两个指针之间的字符元素全部存入这个 Set。
      • 第三个问题,怎么找出最大子串呢?当然是比较长度了,我们设一个变量 max,来存放当前子串长度,初始值为 0。我们在遍历字符串的过程中,如果某字符在集合中不存在,那么比较当前的 max 值 和添加该元素后的 set 大小,取最大值存入 max。
      • 最后一个问题,遇到重复元素如何处理?因为子串是连续的,我们在遇到重复元素的时候只能从子串头部开始删,也就是将 i 位置的元素从集合中删掉,指针后移一位。
    • 代码实现

    public class Solution {
        public static int lengthOfLongestSubstring(String s) {
            int i = 0, j = 0;
            int max = 0;
            Set<Character> set = new HashSet<>();
            while (j < s.length()) {
                if (!set.contains(s.charAt(j))) {
                    set.add(s.charAt(j++));
                    max = Math.max(max, set.size());
                } else {
                    set.remove(s.charAt(i++));
                }
            }
            return max;
        }
    }
    
    • 小结
      这个题目不是很好解答。主要考虑通过快慢指针来限定和修改子串,用集合来存放子串,因为只需要返回满足条件的最大子串长度,所以不需要考虑字符的存放

    相关文章

      网友评论

          本文标题:LeetCode 解题报告 - 3. Longest Subst

          本文链接:https://www.haomeiwen.com/subject/zdgpyttx.html