无重复字符的最长子串

简介: 写一个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;
}
目录
相关文章
|
索引
LeetCode3-无重复字符的最长子串
LeetCode3-无重复字符的最长子串
|
2月前
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
99 0
Leetcode第三题(无重复字符的最长子串)
|
4月前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
6月前
3. 无重复字符的最长子串
3. 无重复字符的最长子串
|
6月前
|
存储 算法 数据挖掘
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
|
7月前
|
并行计算
求无重复字符的最长子串
求无重复字符的最长子串
|
7月前
|
存储 算法 Go
LeetCode 第三题: 无重复字符的最长子串
  给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
|
7月前
leetcode-3:无重复字符的最长子串
leetcode-3:无重复字符的最长子串
39 0
|
7月前
leetcode:3. 无重复字符的最长子串
leetcode:3. 无重复字符的最长子串
43 0
|
算法 Java Python
leetcode:3.无重复字符的最长子串
首先最容易想到的就是暴力解法,列出所有的子字符串,然后逐个检查是否包含重复的字符就行了,这样思路很简单,但是效率太慢,不推荐。
49 0
下一篇
DataWorks