C 面試 字串處理專題(二)

2021-06-18 15:07:56 字數 2585 閱讀 5538

【iv】lcs最長公共子串(連續)

/* [4].lcs 最長公共子串

* const char* longestcommonstring(const char* strleft, const char* strright)

* @author arhaiyun

**/const char* lcs(const char* strleft, const char* strright)

pos = j;

}else}}

else

}prevline.assign(nextline.begin(), nextline.end());

} char *lcs = new char[maxlen + 1];

int startpos = pos - maxlen + 1;

for(int i = 0; i < maxlen; i++)

lcs[maxlen] = '\0';

return lcs;

}

【v】lcs最長公共子串行(可以不連續)

/*[5]. longest common subsequence

* const char* lcsubstring(const char* strleft, const char* strright)

* @author arhaiyun

**/[5].longest common subsequence 最長公共子串行的兩種實現方法(注意同上的區別)

str1: haiyun loves xiaoyan

str2: yun lovess yan

output: yun loves yan

//[1].實現方法一

#include #include #define maxlen 100

void lcslength(char *x, char *y, int m, int n, int c[maxlen], int b[maxlen])

else if(c[i-1][j] >= c[i][j-1])

else}}

}void printlcs(int b[maxlen], char *x, int i, int j)

else if(b[i][j] == 1)

printlcs(b, x, i-1, j);

else

printlcs(b, x, i, j-1);

}int main(int argc, char **argv)

; char y[maxlen] = ;

int b[maxlen][maxlen];

int c[maxlen][maxlen];

int m, n;

m = strlen(x);

n = strlen(y);

lcslength(x, y, m, n, c, b);

printlcs(b, x, m, n);

return 0;

}//[2].lcsubsequence實現方法二

const char* lcsubstring(const char* strleft, const char* strright)

pos = j;

}else}}

else

else

}} prevline.assign(nextline.begin(), nextline.end());

} char *lcs = new char[maxlen + 1];

for(int i = 0, j = 1; i <= pos && j <= maxlen; )

else

}lcs[maxlen] = '\0';

return lcs;

}int main(int argc, char* argv)

【vi】 kmp  部落格演算法解析

#include "stdafx.h"

#include #include #include #include using namespace std;

/*根據定義next[0]=-1,假設next[j]=k, 即p[0...k-1]==p[j-k,j-1]

1)若p[j]==p[k],則有p[0..k]==p[j-k,j],很顯然,next[j+1]=next[j]+1=k+1;

2)若p[j]!=p[k],則可以把其看做模式匹配的問題,即匹配失敗的時候,k值如何移動,顯然k=next[k]。

*/void getnext(char *p, int *next)

else

k = next[k]; }}

int kmpmatch(char *s, char *p)

else

j = next[j];

if(j == strlen(p))

return i - j; }

return -1;

}int main(void)

{ char *s = "haiyun loves xiaoyan";

char *p = "xiaoyan";

cout<

字串專題

created on 2019年12月1日 author hp 擷取字串 str2 我是迪迦奧特曼 str3 str2 5 str4 str2 0 len str2 2 print str3,str4 擷取的字串如果不存在,會出現異常,可以用try.except捕捉異常 try str5 str2 ...

字串專題

給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被視作不同的子串。示例1 輸入 abc 輸出 3 解釋 三個回文子串 a b c 示例 2 輸入 aaa 輸出 6 解釋 6個回文子串 a a a aa aa aaa 解法 1 動態...

字串專題

1.double ceil double x 求大於 x 的最小的數,即向上取整函式 includeusing namespace std intmain 2.a 65 z 90 a 97 z 122 3.字串刪除 c 從string中刪除所有的某個特定字元 超好 includeusing name...