字符串中最大子串问题

来源:互联网 发布:上海电力设计院 知乎 编辑:程序博客网 时间:2024/05/16 18:03

输入一个字符串,输出其最大子串长度,即子串中任两个字符不相同 。本程序只能输入字母,空格以及逗号,并且不区分大小写,输出为第一个具有最大长度的子串以及其长度。

 

#include<iostream>
#include
<string>
using namespace std;

int chartoi(char c)
{
    
if(isalnum(c))
        
{
            
if(isalpha(c))
                
return tolower(c)-'a';
            
else
                
return c-'0'+26;
    }

    
else
        
if(isspace(c))
            
return 36;
        
else if(c==',')
            
return 37;
        
else
        
{
            cout
<<"error input char"<<endl;
            exit(
0);
        }

}


int substr(char* str, int len)
{
    
int A[38]={0};
    
int i,j;
    
int maxlen=0,templen;
    
int beg=0,end=0;
    
for(i=0,j=0;i<len,j<len; ++j)
    
{
        
int num=chartoi(str[j]);
        
if(A[num]==0)
            A[num]
=1;
        
else
        
{
            A[num]
+=1;
            
int step;
            
for(step=i;step<=j;++step)//
            {
                
int num1=chartoi(str[step]);
                
if(A[num1]>1)
                
{
                    
--A[num1];
                    
break;
                }

            }

        
            i
=step+1;

        }

        templen
=j-i+1;
        
if(templen>maxlen)
        
{
            beg
=i;
            end
=j;
            maxlen
=templen;
        }

    }

    
for(i=beg;i<=end;++i)
        cout
<<str[i];
    cout
<<endl;

    
return maxlen;
}


int main()
{
    
char str[]="good morning, everyone";
    cout
<<str<<endl;
    cout
<<substr(str,strlen(str))<<endl;
    
return 0;
}