題目:編寫一個函數int search(char *text),text為輸入的字符串,從字符串中找出一個最長的 不含重復字符的子字符串,例如“axdbx”,返回4,子字符串為“axdb”,而“axdbxce”,返回5,子字 符串為“dbxce”。 [cpp] #include<iostream> #include<string> using namespace std; int search(char *text) { int pos[256]; //映射到每一個字符,記錄這個字符最近出現的位置 int i,start,end,max,curlength; int curstart = 0; start = 0; //最長字符起始位置 end = strlen(text); curlength = max = 0; for(i=0;i<256;i++) //輔助數組的初始化 pos[i] = -1; for(i=1;i<end;i++) { int index = text[i]; if(pos[index]>=start) //如果此字符出現過 { curlength = i - start; //得到這段字符串的長度 if(curlength>max) { start = curstart; max=curlength; } curstart = pos[index]+1; //新的字符串從下一個位置開始 } pos[index] = i; //記錄此字符最近出現位置 } curlength = end - curstart; //最後處理 if(curlength > start) { max = curlength; start = curstart; //最後start保存的最長的子字符串的起始位置 } return max; } int main(void) { char *str="axdbxce"; cout<<search(str)<<endl; return 0; }