侧边栏壁纸
博主头像
阿里灰太狼博主等级

You have to believe in yourself . That's the secret of success.

  • 累计撰写 104 篇文章
  • 累计创建 50 个标签
  • 累计收到 12 条评论

目 录CONTENT

文章目录

leetcode-3. 无重复字符的最长子串

阿里灰太狼
2022-04-30 / 0 评论 / 0 点赞 / 207 阅读 / 845 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

3. 无重复字符的最长子串0
3. 无重复字符的最长子串1

JAVA解法

class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 若传进来的字符串长度小于等于 1,则直接返回其长度即可
        if(s.length() <= 1){
            return s.length();
        }
        // 定义开始指针的位置,以及初始化最长字串的记录值
        int start = 0, max = 1;
        // 将字符串转换为字符数组
        char m[] = s.toCharArray();
        // 遍历字符数组,外层从 1 开始
        for(int i = 1; i < m.length; i++){
            // 里层从 0 开始
            for(int j = start; j < i; j++){
                // 如果前后指针的字符一样,则重新定义开始的位置为当前的位置 +1,并跳出本次循环
                if(m[i] == m[j])
                {
                    start = j + 1;
                    break;
                }
            }
            // 由于 start 从 0 开始的,求真正的长度时要 +1,用三目运算判断当前最长的子串与已记录的最长子串的比较且重新定义最长子串,可能还是原来的最长,也可能是当前子串最长
            max = max > (i - start + 1) ? max : (i - start + 1);
        }
        // 返回遍历后的最终最长子串
        return max;
    }
}

题解分析

  这道题要明确的一点是求最长子串而不是最长子序列。先对传进来的字符串长度进行判断,若传进来的字符串长度小于等于 1,则直接返回其长度即可,定义开始指针的位置,以及初始化最长字串的记录值,并将字符串转换为字符数组。开始遍历字符数组,外层从 1 开始,里层从 0 开始。
  如果前后指针的字符一样,则重新定义开始的位置为当前的位置 +1,并跳出本次循环。每两次循环执行完后都要让当前字串长度与已记录的最长子串长度进行比较,由于 start 从 0 开始的,求真正的长度时要 +1,用三目运算判断当前最长的子串与已记录的最长子串的比较且重新定义最长子串,可能还是原来的最长,也可能是当前子串最长。待遍历完成后记录的最长字串即为所求,返回即可。

leetcode原题:3. 无重复字符的最长子串

0

评论区