zoukankan      html  css  js  c++  java
  • 最长不重复子串

    问题:

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

    程序:

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

    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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    系统集群安装
    用ASP.net判断上传文件类型的三种方法
    C#中利用JQuery实现视频网站
    云计算和大数据
    c# Dictionary 中Keys.ToArray<>方法的细节测试
    DateTime compare
    Dictionary的遍历和修改
    C# 键值对数据排序
    ant使用小结
    给我们的7句话
  • 原文地址:https://www.cnblogs.com/hustcat/p/1736993.html
Copyright © 2011-2022 走看看