LeetCode 3. Longest Substring Without Repeating Characters ( C ) 最短代码

本文介绍了一种解决编程问题的方法,即在给定字符串中找到最长的没有重复字符的子字符串。通过遍历字符串并使用滑动窗口策略,更新子字符串的起始位置以确保无重复字符。示例代码展示了如何实现这一算法,包括处理不同输入情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同步发于 JuzerTech 网站,里面有我软、硬件学习的纪录与科技产品开箱,欢迎进去观看。

题目为给定一个字符串,寻找其中最长的子字符串,并且此子字符串不得有重复之字符。

题目与范例如下

Given a string s, find the length of the longest substring without repeating characters.

Example 1:

Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:

Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:


Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
Example 4:

Input: s = ""
Output: 0

Constraints:

0 <= s.length <= 5 * 104
s consists of English letters, digits, symbols and spaces

 

我采用的策略为,使用一个变量纪录子字符串的起始点,子字符串的终止点为目前寻访到的字符,并逐次检查新加入的字符是否与子字符串内的字符有重复,有则把子字符串的起始点设为重复的下一个,每次比较是否比记录中的最长长度还长。

下方为我的代码

void comparechar(char *str,char target,int *submin, int *submax){
    for(int i = *submin ; i < *submax ; i++ ){
        if(str[i] == target){
            *submin = i+1;
            break;
        }
    }
}

int lengthOfLongestSubstring(char * s){
    int index = 0,submin = 0,max = 0;
    while(s[index] != '\0'){
        comparechar(s,s[index],&submin,&index);
        if(index - submin + 1 > max)
            max = index - submin + 1;
        index++;
    }
    return max;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值