繁体   English   中英

获取字符串中不重复的字符并计算它们

[英]Get non-repeated characters in string and count them

我需要处理像abclkjabc这样的字符串,并且只返回3字符,其中包括字符lkj

我试过这个。

$stringArr = [];
foreach(str_split($string) as $pwd) {
   if(!in_array($pwd, $stringArr)) {
      $stringArr[] = $pwd;
   }
}
$uniqChar = count($stringArr);

请尝试以下操作:

function getNonRepeatingCharacters($str) {
    $counter = [];
    $spllitted = str_split($str);
    foreach($spllitted as $s) {
        if(!isset($counter[$s])) $counter[$s] = 0;
        $counter[$s]++;
    }
    $non_repeating = array_keys(array_filter($counter, function($c) {
        return $c == 1;
    }));

    return $non_repeating;
}

$string = "abclkjabc";
$handle = getNonRepeatingCharacters($string);

尝试这个:

function getNonRepeatingChars($str) {
    $uniqueLetters = '';
    $multipleLetters = '';
    $arrayStr = str_split($str);

    foreach ($arrayStr as $index => $letter) {
        if (strpos($multipleLetters, $value) !== false || strpos($str, $value, $index + 1) !== false) {
            $multipleLetters .= $value;
            continue;
        }

        $uniqueLetters .= $value;
    }

    return $uniqueLetters;
}
echo getNonRepeatingChars('abclkjabc'); // lkj

函数式编程和无临时变量声明:

  1. 创建一个字符数组
  2. 计算每个字符的出现次数
  3. 仅保留出现一次的字符( array_filter()也可以,但更详细)
  4. 重新加入符合条件的字符

代码:(演示)(或只是计数

echo implode(
         array_keys(
             array_intersect(
                 array_count_values(
                     str_split('abclkjabc'),
                 ),
                 [1]
             )
         )
     );

或带有循环的半功能:( Demo )(或只是 count

$unique = '';
foreach (array_count_values(str_split('abclkjabc')) as $char => $count) {
    if ($count === 1) {
        $unique .= $char;
    }
}
echo $unique;

输出:

lkj

可以使用strlen()获取输出字符串的长度。


您可以使用count_chars()计算字符值,而不是拆分字符串和计数数组值。 演示

$string = 'abclkjabc';
$notRepeated = [];
foreach (count_chars($string, 1) as $char => $count) {
    if ($count === 1) {
        $notRepeated[] = chr($char);
    }
}
var_export($notRepeated);
echo "\nCount = " . count($notRepeated);

最终,如果您只需要计算非重复字符的数量,这条单线将带您到达那里。 演示

echo count(array_filter(count_chars($string, 1), fn($count) => $count === 1));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM