2017-04-25 4 views
0

タイトルは、2つの文字列の間で最も長い共通部分文字列を取得する必要があると言います。問題は、複数の共通部品がある場合はALLの共通部分も印刷する必要があることです。例:2つの文字列間の共通部分をすべて印刷します。

$ string1の= "MATCH1 asjdndrey MATCH2 asbafbae"。

$ string2の= "12412342gt MATCH1 hgm1g5m MATCH2"。

必要な出力:MATCH1、MATCH2

これは私が使用しているコードですが、私は最長共通部分文字列を取得するために管理が、一つだけ。それと

<?php 
function getLongestMatchingSubstring($str1, $str2) 
{ 
    $len_1 = strlen($str1); 
    $longest = ''; 
    for($i = 0; $i < $len_1; $i++){ 
     for($j = $len_1 - $i; $j > 0; $j--){ 
      $sub = substr($str1, $i, $j); 
      if (strpos($str2, $sub) !== false && strlen($sub) > strlen($longest)){ 
       $longest = $sub; 
       break; 
      } 
     } 
    } 
    return $longest; 
} 

$string1 = 'asbafbaeMATCH1asjdndreyMATCH2'; 
$string2 = '12412342gtMATCH1hgm1g5mMATCH2'; 
echo getLongestMatchingSubstring($string1, $string2); 
?> 

私は出力としてMATCH1を取得します。たぶん、私が書いているコードは、具体的には最長のコードです。誰かが私に

+0

マッチの配列を保持します。一致するものが見つかったら、配列の要素と同じ長さか長いかを確認します。それより長い場合は、配列を空にして新しいマッチを追加します。同じ長さの場合は、新しいマッチを追加するだけです。 – Barmar

答えて

0

を助けることを願って、私は出力が

アレイだろう配列

<?php 
function getLongestMatchingSubstring($str1, $str2) 
{ 
    $len_1 = strlen($str1); 
    $longest = array(); 
    for($i = 0; $i < $len_1; $i++){ 
     for($j = $len_1 - $i; $j > 0; $j--){ 
      $sub = substr($str1, $i, $j); 
      if (strpos($str2, $sub) !== false && strlen($sub) > 1){ 
       $longest[] = $sub; 
       $i = strpos($str1, $sub) + (strlen($sub)-1); 
       break; 
      } 
     } 
    } 
    return $longest; 
} 

$string1 = 'asbaMbaeMATCH1asjdndreyMATCH22r5g7jdg3MATCH33'; 
$string2 = '1241M342gtMAThgMATCH1m1g5mMATCH2cghdiMATCH33'; 
print_r(getLongestMatchingSubstring($string1, $string2)); 

で最長のマッチを得るためにあなたの機能を変更([0] => M [1] => MATCH1 [2 ] => MATCH2 [3] => MATCH33)

+0

ありがとうございます。できます。しかし、どういうわけか、それは文字列varsに同じ順序で一致する単語を置く場合にのみ機能し、そうでなければ一致する単語が1つだけ表示されます。例:$ str1 = "123Example"と "$ str2 = Example123"の場合、一般的な単語として "123"が表示されます。それを別の方法でコーディングする必要がありますか?とにかくそんなにありがとう、私は私が必要なものに一歩近づいています。 – josephbc

+0

申し訳ありませんが、$ str1の$ iオフセットを計算する間違いがありました。コードを修正してその問題を修正し、条件を変更して1文字一致を表示しないようにしました。 –

関連する問題