leetcode题解:无重复字符的最长子串

博客介绍了如何解决LeetCode的无重复字符的最长子串问题,通过暴力求解和滑动窗口两种算法进行了分析。暴力求解虽然直观,但时间复杂度较高。滑动窗口算法在O(N)的时间复杂度内完成,是更优的解决方案。
摘要由CSDN通过智能技术生成

leetcode题解:无重复字符的最长子串

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

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

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

暴力求解

我们大脑一眼就能看到一个字符串中哪些字符是重复的,按照计算机的思路来分析,首先从首字符开始遍历,如果发现后面的字符不和首字符相同,那么把首字符和后面的字符作为一个整体,再依次和后面进行判断,如果发现下一个字符是在首字符串里面包含的,那么把首字符串作为单独的一段,放到set集合里面,再从下一个字符重复如上的操作,最后比较出set集合里面最长的字符串,就是答案,代码如下:

public int lengthOfLongestSubstring(String s) {
   
        int len = s.length();
        HashSet<String> set = new HashSet<>();
        int res = 1;
        if (len <= 1) {
   
            res = len ;
        }
        for (int i = 0; i < len; i++) {
   
            String ch = s.charAt(i) + "";
            for (int j = i+1; j < len; j++) {
   
                if (!ch.contains(s.charAt(j)+"") ){
   
                    ch += s.charAt(j);
                    if(set.contains(ch)){
   
                        res = Math.max(ch.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值