代码堵塞字符串匹配

时间:2017-03-05 08:28:33

标签: algorithm dynamic-programming

我们提供两种模式。模式只包含大写/小写英文字母和星号(*)。一颗星可以在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;


}

有人可以帮我解决算法中的错误吗?

1 个答案:

答案 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="; } ,您可以匹配一个字母或跳过。我接受了这种方法。