首页 > 编程语言 >【算法】【字符串】无重复字符的最长子串

【算法】【字符串】无重复字符的最长子串

时间:2024-02-26 23:00:39浏览次数:25  
标签:子串 字符 int length maxStr 算法 字符串 currentStr

1  题目

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

输入: s = ""
输出: 0

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

2  解答

绞尽脑汁,咋我老绕自己呢,下边这个能通过,我明天抽空再想想,看看还有什么思路还有哪些能优化的:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int res = 0;
        // 参数边界校验
        if (s == null || s.length() == 0) {
            return res;
        }

        // 当发现重复的就记录当前最长的
        int currentStart = 0;
        String maxStr = "";
        String currentStr = "";
        for (int i = 1; i < s.length(); i++) {
            String subChar = s.charAt(i) + "";
            currentStr = s.substring(currentStart, i + 1);
            // 前面的串不包含当前字符,那就继续向后
            int index = currentStr.indexOf(subChar);
            if (index == currentStr.length() - 1) {
                continue;
            }
            // 包含当前的字符了
            if (currentStr.length() - 1 >= maxStr.length()) {
                maxStr = s.substring(currentStart, i);
            }
            currentStart += (index + 1);
            currentStr = "";
        }
        if (maxStr.length() == 0) {
            return s.length();
        }
        return Math.max(maxStr.length(), currentStr.length());
    }
}

加油。

标签:子串,字符,int,length,maxStr,算法,字符串,currentStr
From: https://www.cnblogs.com/kukuxjx/p/18035791

相关文章

  • 反转字符串
    思路1、建立双指针,一个指最前的元素,一个指最后的元素。将它们两两交换设长度是n,反转可以看成s[0]=s[n-1],top指针指向s[0],end指针指向s[n-1],交换完毕后,top指针++,end指针--,交换s[1]=s[n-2],依次推类。结束循环的条件:如果n是奇数,循环的条件为top=end=n/2如果n是偶数,最后......
  • 2024牛客寒假算法基础集训营4
    2024牛客寒假算法基础集训营4A 柠檬可乐题意根据给定的\(a\)和\(b\),判断是否\(a\gek\timesb\)思路题意非常直接代码/*******************************|Author:AlwaysBeShine|Problem:柠檬可乐|Contest:NowCoder|URL:https://ac.nowcoder.com/acm/......
  • day42 动态规划part4 代码随想录算法训练营 416. 分割等和子集
    题目:416.分割等和子集我的感悟:有点难,更快的解法用了01True和False所以更快理解难点:转化为背包问题听课笔记:代码示例:我优化了下classSolution:defcanPartition(self,nums:List[int])->bool:ifsum(nums)%2==1:returnFalse......
  • day42 动态规划part4 代码随想录算法训练营 46. 携带研究材料- 一维数组写法
    题目:46.携带研究材料我的感悟:一维是二维的压缩理解难点:倒序遍历j因为每轮的数字是由左上决定的。遍历的时候,从右侧遍历,是不会影响左侧的。听课笔记:代码示例:defbag_problem(weight,value,bagWeight):#初始化dp=[0]*(bagWeight+1)fori......
  • 掌握字符与字符串:C语言中的神奇函数解析(一)
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 算法入门:递归和迭代
    文章目录1.递归 1.1.概念1.2.案例1.3.优缺点2.迭代2.1.概念2.2.案例2.3.优缺点3.递归与迭代算法的关系和区别3.1.关系3.2.区别3.3.算法的选择 1.递归1.1.概念递归算法是一种解决问题的方法,其中问题被分解为更小、相似的子问题。这一方法通过不断调用自......
  • day42 动态规划part4 代码随想录算法训练营 卡尔网46. 携带研究材料
    题目:卡尔网-46.携带研究材料我的感悟:有1个测试用例没通过。还要多练习理解难点:dp递推公式的由来,初始化的参数。听课笔记:代码示例:defbag_problem(weight,value,bagweight):#[1,3,4][15,20,30]4ifbagweight==1:index=weigh......
  • 438. 找到字符串中所有字母异位词C
    今天出成绩了,感觉徘徊在被刷的边缘,要好好努力了。这题我想法试建立hash映射成有序的数字,只要字符串个数相同,并且映射和相同那么就是异位串。后来这个想法是错的。以为假设已经已知一个和,和组成这个和的个数,但这个子数并不唯一,比如10=1+2+7。10=2+3+5。这样就会误判。就算能找......
  • 动手实践丨轻量级目标检测与分割算法开发和部署(RK3568)
    本文分享自华为云社区《自动驾驶(AIOT)-轻量级目标检测与分割算法开发和部署(RK3568)【玩转华为云】》,作者:HouYanSong。本文将在ModelArts平台上开发轻量级目标检测与分割算法,并使用ModelBox框架在RK3568开发板上实现模型推理和部署。数据准备我们收集了一份200张由Labelme......
  • 文心一言 VS 讯飞星火 VS chatgpt (202)-- 算法导论15.3 1题
    一、对于矩阵链乘法问题,下面两种确定最优代价的方法哪种更高效?第一种方法是穷举所有可能的括号化方案,对每种方案计算乘法运算次数,第二种方法是运行RECURSIVE-MATRIX-CHAIN。证明你的结论。如果写代码,请用go语言。对于矩阵链乘法问题,下面两种确定最优代价的方法哪种更高效?第一种......