代码如下图所示,时间复杂度为O(n),不仅获得最长的子串长度,并输出了子串。
public static void longestSubstring(String s)
{ int ret = 0;
int m[]=new int[256];
for(int i=0;i<256;i++)
m[i]=-1;
int start = 0;
int finalstart=0;
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if (m[c] >= start)
{
start = m[c] + 1;
m[c] = i;
}
else
{
m[c] = i;
if(i-start+1>ret)
{ ret=i-start+1;
finalstart=start;
}
}
}
for(int i=finalstart;i<finalstart+ret;i++)
System.out.print(s.charAt(i));
System.out.println(ret);
}
结果