最长无重复字符的子串

来源:互联网 发布:最受欢迎的网络歌手 编辑:程序博客网 时间:2024/05/18 00:05

网上看到一道题,找出一个字符串中的不含重复字符的最长子串,并打印,时间复杂度要求O(n)。

比如字符串“abababcmdefghikjflababaefabcdezghikjfaefew”,有四个长度都为12(最长)符合条件的子串:abcmdefghikj、fabcdezghikj、abcdezghikjf和bcdezghikjfa。

 

分析:对于字符串中第i位的字符,如果它知道以第i-1位字符结尾的无重子串的长度L[i-1],又知道第i位字符的前一个出现位置k,于是就可以得出以第i位字符作结尾的无重子串的长度:L[i] = min(L[i-1]+1, i-k),于是可以得到一个O(n)的算法,打印所有符合条件的子串时,只需要遍历L数组一边,如果L[i]=max,则打印以i结尾的max长子串。

 

原创粉丝点击