一种字符串由字符‘0’和‘1’组成,没有其他字符,以‘\0’表示字符串结束,称这种字符串为“零幺串“。
计算一个输入的”零幺串“中,最长的连续‘0’或连续’1‘的长度。
例如:”01110001111101“的最长连续子串是1-子串,其长度为5。
可以利用状态图来理清计算思路,如下图:
预设有0状态和1状态。
在0状态下:
(1)如果读入的字符是’0‘,那么仍然留在0状态,并且累计连续的0字符的数量,并与保留的最大0串长度比较,如果更长的0串,就记录新的长度;
(2)如果读入的字符是’1’,那么就转换到1状态,并且累计连续的0字符的数量,并与保留的最大0串长度比较,如果更长的0串,就记录新的长度;
然后1字符串长度设置为1。
同样处理1状态下的情况。
最后,比较最长的0串和1串,哪个更长就返回哪个。
void get_longest_substr(char *strr, char *chout, int *nmaxlen)
{
int count[2]= {0, 0};//记录当前状态下的0、1子串长度
int maxcount[2]= {0, 0};//记录最长的0、1子串长度
unsigned status=0; //记录状态是0还是1
unsigned char ch;
while ((ch=*(strr++))!='\0')
{
switch(status)
{
case 0:
if(ch=='0')
{
count[0]++;
if(maxcount[0]