欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[leetcode]获取字符串中字符不重复的最长子串的长度

程序员文章站 2022-03-09 18:07:38
...

写完以后发现效率很低,只超过了12.5%的人的运行时间,真尴尬。
不过还是记录一下。
[leetcode]获取字符串中字符不重复的最长子串的长度

public class Test {
    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("dvdf"));
    }

    public static int lengthOfLongestSubstring(String s) {
        if (s.length() == 0)
            return 0;
        else {
            StringBuilder sb = new StringBuilder();
            List<Integer> result = new ArrayList<Integer>();
            String temp = "";
            for (int i = 0; i < s.length(); i++) {
                if (!sb.toString().contains(String.valueOf(s.charAt(i)))) {
                    sb.append(s.charAt(i));
                } else {
                    result.add(sb.length());
                    // 当发现字符重复的时候寻找重复字符在前面子串中最后一次出现的位置,
                    //把这个位置之后的子串中的子串加上当前循环到的字符作为新的子串继续遍历下去
                    if (sb.lastIndexOf(String.valueOf(s.charAt(i))) < sb.length() - 1)
                        temp = sb.substring(sb.lastIndexOf(String.valueOf(s.charAt(i))) + 1, sb.length())
                                + String.valueOf(s.charAt(i));
                    else
                        temp = String.valueOf(s.charAt(i));
                    sb.delete(0, sb.length());
                    sb.append(temp);
                }
                if (i == s.length() - 1)
                    result.add(sb.length());
            }
            Collections.sort(result);
            return result.get(result.size() - 1);
        }
    }
}