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