力扣网-最长回文子串

问题简介

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

image-20220131212254431

编程思路

程序

第一个版本

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;
    }

image-20220131210523544

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

" "

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;
    }

image-20220131212236674

总结

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值