题解 | #最长不含重复字符的子字符串#

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

http://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    public int lengthOfLongestSubstring (String s) {
        int n = s.length();
        int i = 0;
        int j = 0;
        Set<Character> set = new HashSet<>();
        int max = 0;
        while (j < n) {
            // 当前滑动窗口内无重复元素,右边界j一直右移
            if (!set.contains(s.charAt(j))) {
                System.out.println("不包含元素;"+s.charAt(j));
                set.add(s.charAt(j));
                j++;
            } else { // 遇到窗口内已有的元素,左边界i一直右移直到重复元素不在Set内
                while (set.contains(s.charAt(j))) {
//                    System.out.println("包含;"+s.charAt(i));
                    set.remove(s.charAt(i));  //必须加上,否则当有相同的数据时候,while循环一直在此处循环
                    i++;
                    System.out.println(i);
                }
            }
            max = Math.max(max, j - i);
        }

        return max;

    }
}
注意: while循环,当有相同的元素时候,必须先删除,否则一直处在 循环当中
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务