程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 趨勢科技一道編程題

趨勢科技一道編程題

編輯:C++入門知識

題目:編寫一個函數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;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved