趋势科技一道编程题

来源:互联网 发布:sql过安全狗 编辑:程序博客网 时间:2024/05/17 00:03
题目:编写一个函数int search(char *text),text为输入的字符串,从字符串中找出一个最长的
不含重复字符的子字符串,例如“axdbx”,返回4,子字符串为“axdb”,而“axdbxce”,返回5,子字

符串为“dbxce”。



#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;}


原创粉丝点击