LeetCode 第四题

来源:互联网 发布:snh48知乎 直弯 编辑:程序博客网 时间:2024/06/06 00:54

Longest Substring Without Repeating Characters 


使用ASCII码作为Hash函数

借鉴KMP算法,加速滑动速度

LeetCode Time 4ms


#include <stdio.h>

#include <memory.h>


#define CHAR_NUMBER 128
#define BUFFER_SIZE sizeof(char*) * CHAR_NUMBER


int lengthOfLongestSubstring(char* s) 
{
char* HashTable[CHAR_NUMBER];
memset(HashTable, 0, BUFFER_SIZE);


char* pHead = s;
char* pTail = s;


int Length = 0;
int BestLength = 0;


while(*pTail)
{
if (!HashTable[*pTail])
{
HashTable[*pTail] = pTail;
++Length;
++pTail;
}


else
{
int Distance  = pTail - HashTable[*pTail];
BestLength = Length < BestLength ? BestLength : Length;
Length = Distance;


char* pTemp = pHead;
while (pTemp < HashTable[*pTail])
{
HashTable[*pTemp] = 0;
++pTemp;
}


pHead = HashTable[*pTail] + 1;
HashTable[*pTail] = pTail;
++pTail;
}
}


return Length > BestLength ? Length : BestLength;
}
0 0