Php 计算两个字符串之间共享的唯一字符数
我编写了一个PHP函数,它将两个字符串作为参数Php 计算两个字符串之间共享的唯一字符数,php,string,function,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 < strle
$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,$str2){
$cmp=0;
$used_letter=array();
对于($i=0;$i接受的答案是好的,但是,如果您想要比较多个字符串并提取公共字符,下面是另一个解决方案:
$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"]
您可以使用hastable。您现在的复杂度是O(n**2),通过哈希表,您可以将其放在O(n)中。使用哈希表。我将使用数组函数。Explode-array\u unique-array\u intersect-count1)缩进代码并使用空格使代码更具可读性2)现在,您要为第一个字符串的每个字符遍历整个第二个字符串。因此,您将
s
(从string1)与string2
(string2)进行比较,然后它将找到该字符两次。要解决此问题,您需要跟踪已使用的字符。例如,您可以使用一个数组,将两个字符串中的所有唯一字符放入其中,并在递增$cmp
之前检查该字符是否已在数组中。非常感谢@VaibhavBhanushali@novex你不需要写“谢谢”的评论。我会用{}
作为你答案中的第一个if语句,以明确if语句的确切内容。似乎我漏掉了:(@Rizier123@Rizier123这只是我第一次问问题,我不知道这些规则。我感谢你的帮助@cpugourou:D