一个面试题:
给一个字符串、例如 “ababc”要求返回“ab”. 因为“ab”连续重复出现且最长。用C/C++语言写一函数完成该算法,给出复杂度
这么题目在网上有很多的解答的方法,本人参考了网上的程序并自己写了一个程序,仅供参考,如果程序有漏洞的话,希望各位给予指出。
具体的实现思路如下:
先从最左的开始,一个一个字符地扫描,设扫到的index为index. 在扫描到的字符及其右边的所有字符里查找最长的连续出现的字符串.
具体方法是:
1.取得这些字符串的长度totallen-index,除以2,得到可能的重复字符串的最长长度len.
2.判断str(index,index+len)和str(index+len,index+len+len)是不是一样,是的话返回str(index,index+len);
3.不是则len-1,重复第2步直到len = 0;
4.index 加一,重复第1步.
具体的实现代码如下: