簡體   English   中英

計算兩個字符串相互共享的唯一字符數

[英]Count how many unique characters two strings share with each other

我編寫了一個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?

一種可能的解決方案是將字符存儲在兩個字符串共享的數組中,然后在遞增$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");

可接受的答案是好的,但是,如果您想比較多個字符串並提取公共字符,這是另一種解決方案:

$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"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM