字符串中不重复连续字符子串的长度最大值

来源:互联网 发布:罗辑思维 人工智能 编辑:程序博客网 时间:2024/05/22 04:26
 森林举行运动会,小伙伴们身上每个都印着一个字符标记,排成一列,委员会要挑出每列里相邻小伙伴身上没有重复字符标记的,最多能挑出几个?
比如:小伙伴们的字符标记串起来是“ccccccbc” 那相邻的小伙伴身上没有重复的字符标记是cb或者bc,那这个人数就是2。

这题的意思是要记录一个字符串中,无重复子字符串的长度的最大值。案例中cb的长度是2,bc的长度也是2所以返回值是2.
要立即对题目的意思再开始做题!!!
此处,用一个map<>存储字符串中<字符,最近一次出现位置>,通过curStart变量记录最近一个无重复字符串的起始位置。
解答:
public static int lengthOfLongestSubstring(String s) {

     Map<Character, Integer> index = new HashMap<>();  // 存放字符最近一次出现的位置
        int curStart = 0, curLen = 0, maxLen = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);  // 添加字符c到一个已有的无重复字符子串结尾
            if (index.containsKey(c) && index.get(c) >= curStart) { // 字符c已经在这个无重复字符子串中
                curStart = index.get(c) + 1;  // 更新当前无重复字符子串的起点
            }
            curLen = i - curStart + 1;  // 当前无重复字符子串的长度
            if (curLen > maxLen) {
                maxLen = curLen;
            }
            index.put(c, i);
        }
        return maxLen;
    }
阅读全文
0 0