前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-3. 无重复字符的最长子串

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

作者头像
灰太狼学Java
发布2022-06-17 10:29:11
1870
发布2022-06-17 10:29:11
举报
文章被收录于专栏:Java学习驿站

JAVA解法

代码语言:javascript
复制
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. 无重复字符的最长子串

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JAVA解法
  • 题解分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档