为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
萧十郎 2024-01-19 14:46:57
我需要处理一个字符串,例如abclkjabc并仅返回3计算字符l、k和 的字符串j。我已经尝试过这个。$stringArr = [];foreach(str_split($string) as $pwd) {   if(!in_array($pwd, $stringArr)) {      $stringArr[] = $pwd;   }}$uniqChar = count($stringArr);
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

请尝试以下方法:


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);


查看完整回答
反对 回复 2024-01-19
?
UYOU

TA贡献1878条经验 获得超4个赞

函数式编程并且没有临时变量声明:

  1. 创建字符数组

  2. 统计每个字符出现的次数

  3. 仅保留出现过一次的字符(array_filter()也可以,但更冗长)

  4. 重新加入符合条件的角色

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

echo implode(

         array_keys(

             array_intersect(

                 array_count_values(

                     str_split('abclkjabc'),

                 ),

                 [1]

             )

         )

     );

或者使用带有循环的半功能:(演示)(或只是计数

$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));


查看完整回答
反对 回复 2024-01-19
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

尝试这个:


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


查看完整回答
反对 回复 2024-01-19
  • 3 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信