计算两个字符串彼此共享的唯一字符数

时间:2016-06-11 22:29:04

标签: php string function

我编写了一个PHP函数,它将两个字符串作为参数$str1$str2

现在我想计算这两个字符串共享多少个唯一字符。例如:

$str1 = "stringstring1";
$str2 = "stringstring2";

在此示例中,他们共享6个唯一字符,分别是:s,t,r,i,n,g

所以这是我目前的代码:

<?php

    function compare($str1, $str2){
        $cmp = 0;

        for($i = 0; $i < strlen($str1); $i++){

            for($j = 0; $j < strlen($str2); $j++){
                if($str1[$i] == $str2[$j]) 
                    $cmp++;
            }

       }

        echo "Number of characters in common: ".$cmp."<br />";
    }

    compare("stringstring1", "stringstring2");

?>

现在问题是它给了我输出24而不是6.而且我没有看到我出错的地方,输出24而不是6?

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是将字符存储在两个字符串共享的数组中,然后在递增$cmp之前检查是否已经计算了一个字符。

这是重写的代码:

function compare($str1, $str2){
    $cmp = 0;
    $used_letter = array();

    for($i = 0; $i < strlen($str1); $i++){

        for($j = 0; $j < strlen($str2); $j++){
            if($str1[$i] == $str2[$j]) 
                if(!in_array($str1[$i], $used_letter)){
                    $cmp++;
                    $used_letter[$cmp] = $str1[$i];
                }
        }
    }

    echo "Number of characters in common: " . $cmp . "<br />";

}

compare("stringstring1","stringstring2");

答案 1 :(得分:0)

接受的答案很好,但是,如果你想比较多个字符串并提取常用字符,这是另一个解决方案:

$str1 = "stringstring1";
$str2 = "stringstring2";
$str3 = "stringstring3";
$computed = array_merge_recursive(array_count_values(str_split($str1)), array_count_values(str_split($str2)), array_count_values(str_split($str3)));
$commons = array();
foreach ($computed as $key => $el) {
    if (is_array($el)) 
        $commons[] = $key;
}

/*commons*/
["s", "t", "r", "i", "n", "g"]