无重复字符的最长子串

简介: 写一个if语句,当left小于right的时候,就写一个循环遍历从left下标开始的元素到right下标前面的元素,判断是否与right下标的元素相同,相同的话就跳出循环,令left 等于 与 right下标元素相同的元素后面的元素.怎么判断在left和right之间是否存在又和right相同的元素呢?这就用到了falg.如果left < right 的时候就让 right++; max = max = right - left + 1。

3. 无重复字符的最长子串 - 力扣(LeetCode)

570e3cea109e3cfda5f0f09f7da44a16_2d687891254d40e1bd426adff04398b1.png

思路:

这题我们用下标的方法来写

先定义一个左下标和一个右下标,写一个循环遍历整个数组(后面会解释falg的用途)

    int max = 0;
    int left = 0, right = 0;
    int len = strlen(s);
    int falg = 0;
    int i = 0, j = 0;
    //遍历整个数组
    for(i = 0; i < len; i++)
    {
    }

写一个if语句,当left小于right的时候,就写一个循环遍历从left下标开始的元素到right下标前面的元素,判断是否与right下标的元素相同,相同的话就跳出循环,令left 等于 与 right下标元素相同的元素后面的元素.怎么判断在left和right之间是否存在又和right相同的元素呢?这就用到了falg.如果left < right 的时候就让

right++;  max = max = right - left + 1;

right++;  max = max = right - left + 1;
    for(i = 0; i < len; i++)
    {
        if(left < right)
        {
            falg = 0;
            for(j = left; j < right; j++)
            {
                if(s[j] == s[right])
                {
                    falg = 1;
                    break;
                }
            }
            if(falg == 1)
            {
                left = j + 1;
            }
        }
        max = max > (right - left + 1) ? max : (right - left + 1);
        right++;
    }
整体代码:(以力扣为例)
int lengthOfLongestSubstring(char * s){
    int max = 0;
    int left = 0, right = 0;
    int len = strlen(s);
    int falg = 0;
    int i = 0, j = 0;
    //遍历整个数组
    for(i = 0; i < len; i++)
    {
        if(left < right)
        {
            falg = 0;
            for(j = left; j < right; j++)
            {
                if(s[j] == s[right])
                {
                    falg = 1;
                    break;
                }
            }
            if(falg == 1)
            {
                left = j + 1;
            }
        }
        max = max > (right - left + 1) ? max : (right - left + 1);
        right++;
    }
    return max;
}

整体代码:(以力扣为例)

int lengthOfLongestSubstring(char * s){
    int max = 0;
    int left = 0, right = 0;
    int len = strlen(s);
    int falg = 0;
    int i = 0, j = 0;
    //遍历整个数组
    for(i = 0; i < len; i++)
    {
        if(left < right)
        {
            falg = 0;
            for(j = left; j < right; j++)
            {
                if(s[j] == s[right])
                {
                    falg = 1;
                    break;
                }
            }
            if(falg == 1)
            {
                left = j + 1;
            }
        }
        max = max > (right - left + 1) ? max : (right - left + 1);
        right++;
    }
    return max;
}
目录
相关文章
|
存储 安全 Java
【面试题精讲】ArrayBlockingQueue 和 LinkedBlockingQueue 区别
【面试题精讲】ArrayBlockingQueue 和 LinkedBlockingQueue 区别
|
8月前
|
传感器 程序员 Go
一文彻底搞清楚常见的IC封装
本文介绍了常见的IC封装类型,包括DIP、SOP、QFP、BGA、CSP等,详细解释了它们的特点、应用及选型参考,帮助读者理解封装技术的发展趋势与核心功能。
1785 0
一文彻底搞清楚常见的IC封装
|
前端开发 Java
Java高手都在用的秘籍:自定义异常,让错误信息说话!
Java高手都在用的秘籍:自定义异常,让错误信息说话!
827 1
|
小程序 C++
【C++入门 二 】学习使用C++命名空间及其展开
【C++入门 二 】学习使用C++命名空间及其展开
|
移动开发 安全 Android开发
构建高效Android应用:Kotlin与协程的完美结合
【5月更文挑战第17天】 在移动开发领域,性能优化和流畅的用户体验是关键。对于Android平台而言,Kotlin语言凭借其简洁性和功能安全性成为开发的首选。与此同时,协程作为一种新的并发处理方式,在简化异步编程方面展现出巨大潜力。本文将深入探讨如何通过Kotlin语言以及协程技术,提升Android应用的性能和响应能力,并确保用户界面的流畅性。
|
机器学习/深度学习 算法 数据处理
【MATLAB】REMD信号分解+FFT+HHT组合算法
【MATLAB】REMD信号分解+FFT+HHT组合算法
302 0
|
C语言
C语言变量作用域
C语言变量作用域
86 0
|
消息中间件 存储 设计模式
一文读懂kafka消息拉取机制|线程拉取模型
一文读懂kafka消息拉取机制|线程拉取模型
一文读懂kafka消息拉取机制|线程拉取模型
|
JavaScript 前端开发
【面试常见】JS继承与原型、原型链
在 JavaScript 中,继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式,并提供相应的示例代码,并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之前,我们先来详细解释一下原型(prototype)、构造函数(constructor)和实例对象(instance)这三个概念。因为只有对它们有清晰的理解,才能更好地理解和应用JavaScript的继承机制。现在我们将分别介绍它们的含义和它们之间的关系。 建议点赞收藏本文章,以便日后复习~~
323 0
【面试常见】JS继承与原型、原型链
|
移动开发 运维 前端开发
【HTML&CSS】运维、后端你该会的前端基本内容(一)
【HTML&CSS】运维、后端你该会的前端基本内容
228 0