Leetcode 3 - 最大不重复子串

1.Question:

题意:
有一个字符串,现在让我们求出最大的不重复的连续的子串的长度

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.

2.Solution:

本题有两种思路:
第一种,我们视每一个字母都是一个连续的不重复的子串的开始的话,我们可以利用O(n^2)的时间复杂度遍历每一种情况,然后找到最大的一种情况
这种思路会超时

第二种思路很好想,我一开始就想到是这种的解题思路:
我们定义一个头指针,定义一个尾指针,每一次我们头尾指针确定一个不重复的连续 的子串
一旦我们遇到一个相同的我们就让头指针后移到不重复的位置然后维护我们的最大只存放的变量,知道我们的为指针扫描完整个的字符串
直接输出最大的长度就可以啦

本质上,第二种思路算是一种动态规划,我们的状态就是头尾指针的位置(最大的维护的长度)
状态转移方程就是,每次不重复的话,我们直接的递增
相同的话,位移头指针然后继续

对于判断重复的情况,因为题目限定用字符串的,我们采用256大小的数组散列一下就可以了

3.Code:

int lengthOfLongestSubstring(char* s) {
    int max_lengthp=0;
    int book[256];
    for(int i=0;i<256;i++) book[i]=0;
    int i=0;
    int j=0;
    int length=strlen(s);
    while(j<length)
    {
        if(book[(int)s[j]]==1)
        {
            while(s[i]!=s[j]) book[(int)s[i++]]=0;
            i++;
        }
        book[(int)s[j]]=1;
        j++;
        if(j-i>max_lengthp) max_lengthp=j-i;
    }
    max_lengthp=max_lengthp>(j-i)?max_lengthp:(j-i);
    return max_lengthp;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,有三种方法可以解决LeetCode上的最长回文子串问题。 方法一是使用扩展中心法优化,即从左向右遍历字符串,找到连续相同字符组成的子串作为扩展中心,然后从该中心向左右扩展,找到最长的回文子串。这个方法的时间复杂度为O(n²)。\[1\] 方法二是直接循环字符串,判断子串是否是回文子串,然后得到最长回文子串。这个方法的时间复杂度为O(n³),效率较低。\[2\] 方法三是双层for循环遍历所有子串可能,然后再对比是否反向和正向是一样的。这个方法的时间复杂度也为O(n³),效率较低。\[3\] 综上所述,方法一是解决LeetCode最长回文子串问题的最优解法。 #### 引用[.reference_title] - *1* [LeetCode_5_最长回文子串](https://blog.csdn.net/qq_38975553/article/details/109222153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Leetcode-最长回文子串](https://blog.csdn.net/duffon_ze/article/details/86691293)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [LeetCode 第5题:最长回文子串(Python3解法)](https://blog.csdn.net/weixin_43490422/article/details/126479629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值