LeetCode-3-Longest Substring Without Repeating Characters(C语言实现)
来源:互联网 发布:js touchevent事件 编辑:程序博客网 时间:2024/05/22 05:52
(自己推导实现的并不标准的KMP算法)
int lengthOfLongestSubstring(char* s) {
int length = 0; //记录最大长度
int this_len = 1; //记录当前取到的最大长度
int cmp_times = 0; //记录当前从head开始的和tail数据正在进行的比较次数
char *str_head, *str_tail, *cmp; //标记遍历子串的head、tail、正在和tail数据比较的子串内部数据的位置
str_head = s; //初始化head:字符串第一个数据
str_tail = s + 1; //初始化tail:字符串第二个数据
//特殊情况处理(没有字符或只用一个字符)
if(s[0] =='\0')
return 0;
if((++s)[0] =='\0')
return 1;
//普通情况KMP遍历
while(str_tail[0] !='\0') //当tail没有超出字符串进入循环
{
cmp = str_head; //从head开始比较数据,依次向后遍历
//满足不重复条件:while循环,每次cmp后移一位;满足不等条件的位数+1
while(cmp[0] != str_tail[0])
{
++cmp;
++cmp_times;
}
//出现重复:分两种情况讨论
//1、cmp和tail重合(该子串满足条件,延续tail判别):tail后移一位;this_len+1;更新length、this_len、cmp_times;对新串遍历
if(cmp == str_tail)
{
++str_tail;
++this_len;
length = (length > this_len) ? length : this_len;
cmp_times = 0;
continue;
}
//2、子串内部有元素与tail相等(该子串不满足条件,对新串判别):head移到tmp+1位置;更新length、this_len、cmp_times;对新串遍历
if(cmp[0] == str_tail[0])
{
str_head = ++cmp;
length = (length > this_len) ? length : this_len;
this_len -= (cmp_times + 1);
cmp_times = 0;
//细节处理:本算法设置初始条件是tail后置head一位,若出现连续元素重复,更新指针位置时会出现head、tail重合,需手动处理
if(str_head == str_tail)
{
++str_tail;
++this_len;
}
continue;
}
}
return length;
}
- LeetCode-3-Longest Substring Without Repeating Characters(C语言实现)
- [LeetCode]3 Longest Substring Without Repeating Characters (C++,Python实现)
- 【C语言】LeetCode 3. Longest Substring Without Repeating Characters
- Leetcode c语言-Longest Substring Without Repeating Characters
- LeetCode 3. Longest Substring Without Repeating Characters (C语言)
- C实现 LeetCode->Longest Substring Without Repeating Characters
- [LeetCode#3][C]Longest Substring Without Repeating Characters
- LeetCode 3. Longest Substring Without Repeating Characters(C++)
- 【leetcode】3. Longest Substring Without Repeating Characters(Python & C++)
- LeetCode 3 - Longest Substring Without Repeating Characters
- LeetCode 3: Longest Substring Without Repeating Characters
- leetcode-3:Longest Substring Without Repeating Characters
- LeetCode(3) Longest Substring Without Repeating Characters
- leetcode 3LONGEST SUBSTRING WITHOUT REPEATING CHARACTERS
- Leetcode【3】:Longest Substring Without Repeating Characters
- [leetcode 3] Longest Substring Without Repeating Characters
- [Leetcode] 3 - Longest Substring Without Repeating Characters
- LeetCode 3:《Longest Substring Without Repeating Characters》
- LeetCode: Merge Two Sorted Lists, Remove Duplicates/Element, strStr()
- Linux下编译安装redis,详细教程
- GC(游戏客户端)如何处理服务器的响应
- 语音识别之Python开发
- 机器学习之Python库
- LeetCode-3-Longest Substring Without Repeating Characters(C语言实现)
- codeforces round#452 div2 解题记录
- centos7上安装mysql-5.7.20版本
- m1
- m2
- Java之学习路线
- 延期一年,Uber飞行计程车项目预计2024年商用
- 处处“针对”英特尔 X86,IBM 组建的 OpenPower 联盟要起势?
- 英国金融行为监管局发严重警告:投资比特币小心血本无归