每天一算法(链表逆序,子字符串等几个一起)
(1) 用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。
int sunday(const char *src,const char *des){int i,j,pos=0;int len_s,len_d;int next[26]={0}; //next数组,预处理初始化len_s=strlen(src);len_d=strlen(des);for(j=0;j<26;++j) //初始化next数组next[j]=len_d;for(j=0;j<len_d;++j) //设置next数组next[des[j]-'a']=len_d-j; while( pos<(len_s-len_d+1) ) //遍历原串 {i=pos;for(j=0;j<len_d;++j,++i) //比较{if(src[i]!=des[j]) //一旦不匹配,原串就按照next跳转{pos+=next[src[pos+len_d]-'a'];break;}}if(j==len_d)return pos;}return -1; //无子串则返回-1}int main(){char src[]="abcdacdaahfacabcdabcdeaa";char des[]="abcde";cout<<sunday(src,des)<<endl;return 0;}