Create a new string with unique char and sorted with frequency first and then asc alphapetical order

StackOverflow https://stackoverflow.com/questions/23659246

  •  22-07-2023
  •  | 
  •  

Domanda

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?

È stato utile?

Soluzione 2

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

Altri suggerimenti

$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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top