Php 创建一个具有唯一字符的新字符串,并首先按频率排序,然后按asc字母顺序排序
给定一个字符串,必须根据字符出现次数创建一个字符串,如果出现次数相等,则按字母顺序排序Php 创建一个具有唯一字符的新字符串,并首先按频率排序,然后按asc字母顺序排序,php,arrays,sorting,Php,Arrays,Sorting,给定一个字符串,必须根据字符出现次数创建一个字符串,如果出现次数相等,则按字母顺序排序 $inputstring = 'ababbdcbeccc'; $stringCharArray = str_split($inputstring); for($i = 0; $i < strlen($inputstring); $i++ ) { $character = $stringCharArray[$i]; array_intersect($stringCharArray,arr
$inputstring = 'ababbdcbeccc';
$stringCharArray = str_split($inputstring);
for($i = 0; $i < strlen($inputstring); $i++ )
{
$character = $stringCharArray[$i];
array_intersect($stringCharArray,array($character));
$array = array_values(array_intersect($stringCharArray,array($character)));
if(!in_array($character ,$uniqueCharArr))
{
$uniqueCharArr[$i] = $array[0];
$uniqueCharFreqArr[$i]['char'] = $array[0];
$uniqueCharFreqArr[$i]['frequency'] = count($array);
}
}
sort($uniqueCharFreqArr);
var_dump($uniqueCharFreqArr);
输出
还有其他优化方法吗
$frequencies = array_count_values(str_split($inputstring, 1));
arsort($frequencies);
$outputstring = implode('', array_keys($frequencies));
这不符合相同频率的字母应按字母顺序排列的要求。PHP没有同时查看键和值的排序函数。
<?php
ini_set( 'xdebug.var_display_max_depth', 4 );
/* INITIALIZATION OF DATA TYPES AND VARIABLES */
$m = 0;
$string = NULL;
/* INPUT VALUE */
$inputstring = 'ababbdcbeccaabbccffttbasdc';
var_dump($inputstring);
$frequencies = array_count_values(str_split($inputstring));
arsort($frequencies);
$charArrWithDecFreq = array_keys($frequencies);
$arrFreqOccr = array_count_values($frequencies);
foreach($arrFreqOccr as $k=>$v)
{
$a = array();
for($i=0; $i<$v; $i++)
$a[] = $charArrWithDecFreq[$m++];
sort($a);
$string .= implode('',$a);
}
/* OUTPUT DUMP TO SCREEN */
var_dump($string);
?>
输出应为bcaed。。4.这是一件很平常的事。。要使用循环检查频率和字符?您可以使用第一行获取频率,然后将其重新排列到一个数组中,以便按照您想要的方式进行排序。
$frequencies = array_count_values(str_split($inputstring, 1));
arsort($frequencies);
$outputstring = implode('', array_keys($frequencies));
<?php
ini_set( 'xdebug.var_display_max_depth', 4 );
/* INITIALIZATION OF DATA TYPES AND VARIABLES */
$m = 0;
$string = NULL;
/* INPUT VALUE */
$inputstring = 'ababbdcbeccaabbccffttbasdc';
var_dump($inputstring);
$frequencies = array_count_values(str_split($inputstring));
arsort($frequencies);
$charArrWithDecFreq = array_keys($frequencies);
$arrFreqOccr = array_count_values($frequencies);
foreach($arrFreqOccr as $k=>$v)
{
$a = array();
for($i=0; $i<$v; $i++)
$a[] = $charArrWithDecFreq[$m++];
sort($a);
$string .= implode('',$a);
}
/* OUTPUT DUMP TO SCREEN */
var_dump($string);
?>