<?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);
?>
Create a new string with unique char and sorted with frequency first and then asc alphapetical order
Pergunta
A string is given and have to create a string based in the character occurrence and in case of equal occurrence sort it with alphabetical order.
$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);
VAR_DUMP OF ABOVE CODE
array
0 =>
array
'char' => string 'a' (length=1)
'frequency' => int 2
1 =>
array
'char' => string 'b' (length=1)
'frequency' => int 4
2 =>
array
'char' => string 'c' (length=1)
'frequency' => int 4
3 =>
array
'char' => string 'd' (length=1)
'frequency' => int 1
4 =>
array
'char' => string 'e' (length=1)
'frequency' => int 1
OUTPUT
//PRINT OUTPUT STRING
bcade
Any other optimized method?
Solução 2
Outras dicas
$frequencies = array_count_values(str_split($inputstring, 1));
arsort($frequencies);
$outputstring = implode('', array_keys($frequencies));
This doesn't meet the requirement that letters with the same frequency should be in alphabetical order. PHP doesn't have a sorting function that looks at both keys and values.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow