力扣网-最长回文子串

问题简介

其实本问题还是针对于数组的两层循环使用。

力扣网-最长回文子串

编程思路

程序

第一个版本

public int lengthOfLongestSubstring(String s) {
        char[] chars = s.toCharArray();

        // 每个子串的最大长度
        int max = 0;
        Set<Character> uniqueChars = new HashSet<>();
        for (int i = 0; i < chars.length; i++) {
            uniqueChars.add(chars[i]);
            for (int j=i+1; j<chars.length; j++) {
                if (!uniqueChars.contains(chars[j])) {
                    uniqueChars.add(chars[j]);
                } else {
                    max = uniqueChars.size() > max ? uniqueChars.size() : max;
                    uniqueChars.clear();

                }

            }
        }
        return max;
    }

力扣网-最长回文子串

这是由于未考虑边界情况。空串里面包含空格。

" "

AC版本

 AC版本与之前版本的主要区别是内层循环中使用了break子句,这样语义明确下来,内层循环不断的处理不同字符串的追加,然后break跳出内层循环之后,最后进行max的最后的处理。

    public int lengthOfLongestSubstring(String s) {
        // 每个子串的最大长度
        int max = 0;
        Set<Character> uniqueChars = new HashSet<>();
        for (int i = 0; i < s.length(); i++) {

            uniqueChars.add(s.charAt(i));
            for (int j=i+1; j<s.length(); j++) {
                if (!uniqueChars.contains(s.charAt(j))) {
                    uniqueChars.add(s.charAt(j));
                } else {
                    break;
                }

            }
            max = uniqueChars.size() > max ? uniqueChars.size() : max;
            uniqueChars.clear();
        }
        return max;
    }

力扣网-最长回文子串

总结

 其实这个题目并不复杂,主要考察的是数组的二维遍历,但是在使用过程中使用了String.charAt(index),自己整合了Set类型,因为可以方便的借助其包含功能,来实现无重复字符的最长子串的不断累加。

 这个代码的功能其实与子串最大值与最小值的差有相似考察,还需要体会。

上一篇:2022-2023年英语周报七年级第27期答案汇总


下一篇:【强化学习】使用LSTM模型来生成歌词