首页 > 解决方案 > 按顺序返回字符串中出现的字母

问题描述

我制作了这段代码来返回字符串中字母的出现次数。此函数返回 '6a3b5y' 但我希望它尊重顺序并显示 '4a3b2a5y' 如何将其更改为显示 '4a3b2a5y' ?

function encode($input) {
    $l = mb_strlen($input, 'UTF-8');
    $unique = array();
    for($i = 0; $i < $l; $i++) {
        $char = mb_substr($input, $i, 1, 'UTF-8');
        if(!array_key_exists($char, $unique))
            $unique[$char] = 0;
        $unique[$char]++;
    }
    $a=[];
    foreach($unique as $k=>$val){
    $a[]= $val.$k ;
    }
      return implode("",$a) ;
}
echo encode('aaaabbbaayyyyy') ;

标签: php

解决方案


使用变量来保存前一个字符。将当前字符与其进行比较。如果它们相同,则增加一个计数器。如果不是,则输出前一个字符和计数器,然后重置变量。

最后,输出最终字符和计数器。

function encode($input) {
    $output = '';
    $l = mb_strlen($input, 'UTF-8');
    $prevchar = mb_substr($input, 0, 1, 'UTF-8');
    $count = 1;
    for($i = 1; $i < $l; $i++) {
        $char = mb_substr($input, $i, 1, 'UTF-8');
        if ($char == $prevchar) {
            $count++;
        } else {
            $output .= "$count$prevchar";
            $count = 1;
            $prevchar = $char;
        }
    }
    $output .= "$count$prevchar";
    return $output;
}

推荐阅读