给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度

题目

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解法1:

public int lengthOfLongestSubstring (String s) {
        // write code here
        char[] chars = s.toCharArray();
        // 标记最大字串长度
        int max = 0;
        // 当前字串长度
        int len = 0;
        StringBuilder sb = new StringBuilder();
        for (char c: chars){
            // 判断当前字串是否已包含字符
            if (!sb.toString().contains(c+"")){
                // 没包含,直接拼接
                sb.append(c);
                len+=1;
            } else {
                // 已包含,从包含此字符的位置起,截取字符串到当前位置
                String pre = sb.toString();
                int index = pre.indexOf(c);
                String substring = pre.substring(index + 1);
                sb = new StringBuilder(substring);
                // 将去掉到字符从新拼接到末尾
                sb.append(c);
                len = sb.toString().length();
            }
            // 赋值最大字串长度
            if (len > max){
                max = len;
            }
        }
        return max;
    }

解法2:

public int lengthOfLongestSubstring(String s) {
        String subStr = "";
        int maxLen = 0;
        for (int i = 0; i < s.length(); i++) {
            String s1 = s.charAt(i) + "";
            if (subStr.contains(s1)) {
                subStr = subStr.substring(subStr.indexOf(s1) + 1) + s1;
            } else {
                subStr += s1;
                System.out.println(subStr);
                maxLen = (subStr.length() > maxLen) ? subStr.length() : maxLen;
            }
        }
        return maxLen;
    }

解法类似

你可能感兴趣的:(算法)