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