设为首页 加入收藏

TOP

趋势科技一道编程题
2015-11-21 01:12:17 来源: 作者: 【 】 浏览:2
Tags:趋势科技 一道 编程
题目:编写一个函数int search(char *text),text为输入的字符串,从字符串中找出一个最长的
不含重复字符的子字符串,例如“axdbx”,返回4,子字符串为“axdb”,而“axdbxce”,返回5,子字
符串为“dbxce”。
?
?
?
[cpp] ?
#include ?
#include ?
??
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
? ? { ?
? ? ? ? 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<
? ? return 0; ?
} ?
?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇百钱买百鸡 下一篇立体视觉算法--SAD+DP

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: