当前位置:网站首页>Leetcode——3.无重复字符的最长字串
Leetcode——3.无重复字符的最长字串
2022-08-09 15:07:00 【榶曲】
目录
题目:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters
2.思路
滑动窗口
3.代码
int lengthOfLongestSubstring(char* s) {
int begin = 0;//子串最开始下标
int end = 0;//字串结束下标
int max = 0;//字串长度最大值
int count = 0;//统计子串中的字符个数
if (*s == NULL) //首先,判断该数组是否为空,若为空直接返回,否则进入循环
return NULL;
while (s[end]!='\0')//当循环到最后'\0'时,滑动窗口结束,跳出循环
{
count = 0;
for (int i=begin;i<=end;i++)
{
count++;//查看此子串内有多少个字符,依次比较
if (s[i]==s[end] && i != end)
{
begin = i + 1;
break;
}
}
if (count > max)
{
max = count;
}
end++;
}
return max;
}
int main()
{
char s[] = "ab";
int a = lengthOfLongestSubstring(s);
printf("%d", a);
return 0;
}
第一次循环
由第一个字符开始比较,并得出它的长度
第二次循环
第三次循环
第四次循环
此时,下标为3的字符与下标为0的字符相同,确定前三个字符为第一个不重复的子串,得出该子串长度,并将变量begin向右移动一位,再次组成一个不重复的子串,进行下一次循环,并将上一子串的长度与max进行比较,选择最大值
最后循环上述操作
边栏推荐
猜你喜欢
随机推荐
投入C语言
浮动的特点
Win10 Runas 命令 域用户以管理员权限运行
继承关系下构造方法的访问特点
超级火的夏日小空调
display属性的使用
Heap series_0x06: NT global flags and gflags.exe one page
2022年华数杯C题插层熔喷完整解题思路(附代码+详细讲解视频)
IDEA中操作数据库 以MySQL为例,可以放弃Navicat了
3. Using Earth Engine Data
给我一个机会,帮你快速上手三子棋
C语言知识细节点(一)
5. Visualizing Geospatial Data
文字样式的常见属性的如何使用?
学编程的第十一天
2022高教社杯 国赛数学建模 D题思路
(七)小思同学和性能
Go语言基础(十一):反射
布隆过滤器及LRU Cache的实现
2021深圳杯A题思路 火星探测器着陆控制方案