码迷,mamicode.com
首页 > 其他好文 > 详细

[算法]求一段包含所有种类的字符子串

时间:2014-07-03 20:28:46      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   width   

 有一个字符串首尾相连(m个字符),有n种字符组成,求一段能使包含n种字符的子串,并使长短最短,时间复杂度要求O(n),空间复杂度O(1)

 

#include <cstring>int foo(const char* str, int m, int n){
    int hit[256], count = 0, begin = 0, end, len = m;
    memset(hit,0,256*4);
    int j;
    for(j = 0; j < m && count < n; ++j){
        if(1 == ++hit[str[j]]){
            ++count;
        }
    }
    len = j;
    end = j;
    int i = 0;
    while(i < m-1){
        while(n == count && i < m-1){
            if(0 == --hit[str[i++]]){
                --count;
            }
        }
        if( n != count && len > end - (i-1)){
            begin = i-1;
            len = end - (i-1);        
        }
        for(j = end; count != n; ++j){
            if(1 == ++hit[str[j%m]]){
                ++count;
                end = j+1;
                if(j-i+1 < len){
                    begin = i;
                    len = j-i+1;
                }
            }
        }
    } 
    return len;
}

 

 

 

bubuko.com,布布扣
本文基于知识共享署名-非商业性使用 3.0 许可协议进行许可。欢迎转载、演绎,但是必须保留本文的署名林羽飞扬,若需咨询,请给我发信

[算法]求一段包含所有种类的字符子串,布布扣,bubuko.com

[算法]求一段包含所有种类的字符子串

标签:style   blog   http   color   使用   width   

原文地址:http://www.cnblogs.com/zhengyuhong/p/3821059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!