数据结构(3):串

来源:互联网 发布:高级sql编程 编辑:程序博客网 时间:2024/06/04 22:13

三、串

串是由零个或者多个字符串组成的有限序列,又名叫字符串。

1.模式匹配

int Index(String S, Sting T, int pos){ //返回子串T在主串S中第pos个字符之后的位置int i=pos;//i用于记录主串S中当前位置的下标,若pos不为1,则从pos位置开始匹配int j=1;//j用于记录子串T中当前位置的下标while(i<=S[0]&&j<=T[0]){//i小于S的长度并且T小于T的长度if(S[i]=T[i]){//两字母相等i++;j++;}else{i=i-j+2;//i退回上次匹配位置的下一个位置j=1;//j退回T的首位}if(j>T[0]){//完全匹配return i-T[0];}else{return 0;}}}

2.KMP模式匹配

void get_next(String T, int next[]){//通过计算返回子串T的next数组int i=1;int j=0;next[1]=0;while(i<T.length){if(j==0||T[i]==T[j]){//T[i]表示后缀的单个字符i++;//T[j]表示前缀的单个字符j++;next[i]=j;}j=next[j];//若字符不相同,则j值回溯}}int Index_KMP(String S, String T, int pos){  //返回子串T在主串S中第pos个字符之后的位置int i=pos;//i用于记录当前S的位置下标int j=1;//j用于记录当前T的位置下标int next[255];//定义一维数组get_next(T,next);//分析得到T的nextwhile(i<=S.length&&j<=T.length){if(j==0||S[i]==T[j]){//两字母相同i++;j++;}else{j=next[j];//j退回到合适位置,重新匹配}}if(j>T.length){return i-T.length;}else{return 0;}}



















0 0