最长不含重复字符的子字符串,从一个字符串中找出一个最长的不包含重复字符的子字符串,计算该最长字符串的长度,字符只包含‘a’-‘z’
解法一:暴力解法,依次遍历每个字符,遍历到X位,检查以X位为起点的字符串字符数,用26位数组或hashmap记录字符个数,一旦个数大于1即停止,循环到X-1位,直至结束,O(N^2)
解法二:动态规划,如果以最后一个节点结束的最长子数组
解法二:
int longestSubstringWithoutDuplication_3(const std::string& str)//diy dynamic
{
if (str.size() <= 0) return 0;
int* LenArr = new int[str.size()]();
LenArr[0] = 1;
for (int i = 1; i < str.size();i++)
{
char temp = str[i];
int pos = i-1;
while (pos>=0)
{
if (temp==str[pos])
{
if (i-pos>LenArr[i-1])
LenArr[i] = LenArr[i - 1] + 1;
else
LenArr[i] = i-pos;
break;
}
pos--;
}
if (pos<0)
LenArr[i] = LenArr[i - 1] + 1;
}
int longnum = 0;
for (int i = 0; i < str.size();i++)
longnum = LenArr[i]>longnum ? LenArr[i] : longnum;
delete[] LenArr;
return longnum;
}