我们提供两种模式。模式只包含大写/小写英文字母和星号(*)。一颗星可以在zero and four
个字母之间匹配。
例如,GoneGirl和GoneTomorrow匹配Gone **模式,但是标题为TheGoneGirl和GoneWithTheWind的书不能。
Question Link
我们必须找出是否有匹配的字符串匹配两种模式。
我的做法: 动态编程维护一个二维数组。
M[0][0]=true;
for(int i=1;i<=S.length();i++){
for(int j=1;j<=A.length();j++){
if(!M[i-1][j-1]) continue;
if(S.charAt(i-1)=='*'){
for(int k=0;k<4;k++) M[i][j+k]=true;
M[i][j-1]=true;
}
if(A.charAt(j-1)=='*'){
for(int k=0;k<4;k++) M[i+k][j]=true;
M[i-1][j]=true;
}
if(S.charAt(i-1)==A.charAt(j-1)) M[i][j]=true;
}
有人可以帮我解决算法中的错误吗?
答案 0 :(得分:0)
您的代码似乎差不多正确。但是,请考虑这个例子 -
A = "*"
B = "****"
在这里你dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = true
*
,B
中的每个*
,可以有另外4 *
个,总共16个星。在这种情况下,你的程序将不起作用。
安全方法是在进行DP计算之前,通过将每个*
替换为4 *
来预处理字符串。然后,对于每个// Link check
if ( link.href.indexOf(myDomain) > 0 ) {
// Take the href and append the UTM parameters
link.href += "?utm_source=" + {{UTMsource}} +
"&utm_campaign=target_blog&utm_medium=" + link.id +
"&utm_term=&utm_content=";
}
,您可以匹配一个字母或跳过。我接受了这种方法。