php - 按顺序返回字符串中出现的字母
问题描述
我制作了这段代码来返回字符串中字母的出现次数。此函数返回 '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') ;
解决方案
使用变量来保存前一个字符。将当前字符与其进行比较。如果它们相同,则增加一个计数器。如果不是,则输出前一个字符和计数器,然后重置变量。
最后,输出最终字符和计数器。
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;
}
推荐阅读
- r - 创建多列分面函数
- android - 如何使我的底部工作表模式可滚动?
- android - 如果没有上传整个数据,有没有办法删除 Firebase-Storage 数据?
- java - 程序关闭并再次运行后无法第二次写入文件。只保存第一次
- python - AWS Lambda、Python 和 Plotly:通过 plotly.offline.plot() 生成 SVG 似乎不起作用
- encryption - 将可选属性添加到 OpenSSL pkcs8 密钥
- php - PHP在网站上显示来自SQL表的数据
- docker - Docker - 套接字文件的卷映射是一种覆盖行为吗?
- asp.net-core - 即使用户未登录,授权属性仍会成功传递
- python - 如果特定字符串 A 出现在字符串 B 的开头和/或结尾,我们如何从 B 中删除 A?