逻辑也还算清晰的medium题,只要计算两个重复字母间的字母个数,求个数最大值就行。因为要存已读字母,很自然的想到用数组(可以说成hashtable么)。
代码如下:
bool charHash(char *hashTable, char c)
{
int index = c;
if (hashTable[index] != c) {
hashTable[index] = c;
return false;
}
else {
memset(hashTable, -1, sizeof(char) * 256);
// hashTable[index] = c;
return true;
}
}
int lengthOfLongestSubstring(char* s) {
int result = 0, temp = 0;
char *low = s, *high = s;
char *hashTable = (char *)malloc(sizeof(char) * 256);
memset(hashTable, -1, sizeof(char) * 256);
while (*high != '\0') {
if (!charHash(hashTable, *high)) {
temp++;
}
else {
low++;
high = low;
temp = 0;
continue;
}
if (result <= temp)
result = temp;
high++;
}
free(hashTable);
return result;
}