最长不重复子串

问题:

找到一个字符串中的一个连续子串,这个子串内不能有任何两个字符是相同的,并且这个子串是符合要求的最长的。

 

程序:

代码
/************************************************************************/
/* 求最长不重复子串                                                     */
/************************************************************************/

void lnorepstr(char*  s)
{
    
char A[26];
    
int  i, j;
    
int  maxi, maxlen = 0;
    
int  len = strlen(s);

//    for(i = 0; i < 26; i++)
//        A[i] = -1;

    memset(A, 
-126);
    
for (i = 0; i < len; i++)
    {
        A[s[i] 
- 'a'= 1;
        
for(j = i+1 ; j < len; j++)
        {
            
if(A[s[j]-'a'== -1//该字符没有出现
            {
                A[s[j]
-'a'= 1;
                
if(j - i> maxlen)
                {
                    maxlen 
= j - i;
                    maxi 
= i;
                }
            }
            
else
                
break;
        }
        memset(A, 
-126);
    }
    printf(
"longest no repeat string: %.*s\n", maxlen+1&s[maxi]);
}

 

假设字符串全部是由小写字母组成,则内层循环最多执行26次,即最长不重复子串的长度为26,此时,时间复杂度为O(26n)。

 


作者:arrowcat
出处:http://www.cnblogs.com/hustcat/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

posted @ 2010-05-16 23:13  YY哥  阅读(3199)  评论(0编辑  收藏  举报