最近被面试,面试官出了一个小题,找出给定的字符串中最大的不重复子串,后来网查发现其实有很多作者给了实现样例。
前提: 可能有多个不重复的最长子串,返回任意一个即可(不然要整一个std::vector<std::string>变量 来维护所有可能的最长子串了)
面试的时候,时间有限,折腾了20多分钟,磕巴的写了下面的函数,纯C风格
char* getMaxNotRepeatStr(const char* inputStr)
{
if(nullptr == inputStr) return nullptr;
int length = strlen(inputStr);
int maxlength = 0
char *maxLenSubStr = (char *)malloc(length + 1);
memset(maxLenSubStr, 0x00, length + 1);
char *tmpStr = (char *)malloc(length + 1);
for(int i = 0; i < length; i++)
{
memset(tmpStr, 0x00, length + 1);
int j = i;
int k = 0;
while(inputStr[j] && !strchr(tmpStr, inputStr[j]))
{
tmpStr[k++] = inputStr[j++];
}
if(maxlength < k)
{
maxlength = k;
strncpy(maxLenSubStr, tmpStr, k);
maxLenSubStr[k] = '\0';
}
}
free(tmpStr);
char *subStr = (char *)malloc(maxlength + 1);
strncpy(subStr, maxLenSubStr, maxlength);
subStr[maxlength] = '\0';
free(maxLenSubStr);
return subStr;
}