首页 > 技术文章 > 最长连续字符

wft1990 2017-06-12 11:13 原文

用递归算法写一个函数,求字符串最长连续字符的长度,比如aaaabbcc的长度为4,aabb的长度为2,ab的长度为1。

 (下面递归的代码有问题)

#include <iostream>
#include <cstring>
using namespace std;
int MaxLengthString(char str[])
{
    int len=strlen(str);
    if(len==1) return 1;
    if(str=='\0') return 0;
    if(*(str+1)=='\0') return 1;
    if(*str == *(str+1)) return 1+MaxLengthString(str+1);
    return MaxLengthString(str+1);
}
int main()
{
    char str[100];
    while(cin.getline(str,100))
    {
        int len=MaxLengthString(str);
        cout<<"Max length of string is:"<<len<<endl;
    }
    return 0;
}

 

非递归的实现代码:

#include<stdio.h>  
#include<assert.h>  
int get_max_char_count(char *s,char *ret)  
{  
    assert(s!=NULL);  
    char *temp_char,*final_char,*p;  
    int temp_count,final_count=0;  
    p=s;  
    while(*p!='\0')  
    {  
        temp_count=0;  
        for(temp_char=p,p=p+1,temp_count=1;*p!='\0';p++)  
        {  
            if(*p==*temp_char)  
                temp_count++;  
            else  
                break;  
        }  
        if(temp_count>final_count)  
        {  
            final_char=temp_char;  
            final_count=temp_count;  
        }  
    }  
    *ret=*final_char;  
    return final_count;  
}  
int main()  
{  
    char s[]="aabbbcccc";  
    int count;  
    char c;  
    count=get_max_char_count(s,&c);  
    printf("%c is appeared %d times\n",c,count);  
    return 0;
}

 

推荐阅读