【看懂LeetCode】3. 无重复字符的最长子串
一、绪
这道题要引入一个概念——滑动窗口
本篇文章,主要是以c语言编程解决LeetCode题库第三题,如何求出无重复字符的最长子串长度?
二、无重复字符的最长子串
链接: 无重复字符的最长子串.
(一)题目描述
解释:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
解题思路:
//运用滑动窗口原理
//1.定义一个头指针、一个尾指针,初始时都指向s序列最左边的元素
//2.尾指针向右移动一位,直至尾指针移到s序列的末尾(while循环使尾指针不断向右移动,直到s序列末尾为止)
//判断尾指针元素是否和头指针和尾指针的前一位之间的序列有重复元素(通过再定义一个指针p来遍历判断)
//若是有重复元素,头指针向右移动到遍历指针p的下一位
//用整型值max去记录尾指针移动的过程中,满足条件的最大长度
(二)AC代码
int lengthOfLongestSubstring(char * s){
char *head,*tail,*p;
int max = 0,count;
head = tail = s;
while(*(tail++) != '\0'){
count = 0;
for(p=head;p!=tail;p++){
count++;
if(*tail == *p)
head = p+1;
}
if(count>max)
max = count;
}
return max;
}