趋势科技2011校园招聘的一道编程笔试题
题目:编写一个函数int search(char *text),text为输入的字符串,从字符串中找出一个最长的不含重复字符的子字符串,例如“axdbx”,返回4,子字符串为“axdb”,而“axdbxce”,返回5,子字符串为“dbxce”。
以下是我的答案,当然,较当时答题时的答案少有改动,但思路是一样的,毕竟答题时没有环境让我去debug。该算法时间复杂度为O(n)。并且不需要反复重置pos数组,每次访问到重新赋值即可。
#include < iostream.h>
#include < string.h>
int search(char *text)
{
int pos[128]; //用于记录字符最近一次出现的位置,使用ASC码做索引
int maxL = 0; //记录最大长度
int start = 0; //记录连续字符串的起始位置
int end = strlen(text), i, tL; //end为字符串text上界
for (i=0; i<128; i++) pos[i] = -1; //为每个字符初始化位置
for (i=0; i
[......]