This is called Run-Length-Encoding (RLE)  of a string.
Its purpose is to save space.So in case of abcdef,I think the output needed 
is abcdef (1 is implicit).
The added benefit is it makes the solution in-place.

Approach:- (In-place and Linear Time)
Start from the left of  string  and  PREVIOUS_CHAR = str[0]
move forward till u match the CURRENT_CHAR with PREVIOUS_CHAR and keep 
count of PREVIOUS_CHAR
At any point if (PREVIOUS_CHAR!=CURRENT_CHAR)
   put the count of prev_char next to the start position of the previous 
character.

Below is the working code :-
void torle(char *str)
{   int i=0,j=0,k=0,cnt=1;
    char cur_char=str[0],num[100];
    while(str[j+1])
    {
            cnt=1;
            while(str[j+1]==cur_char && str[j]!='\0'){
                j++;
                cnt++;
            }
            str[i++]=cur_char;
            if( cnt>9 ){
                itoa(cnt,num);
                k=0;
                while(num[k]) str[i++]=num[k++];
            }
            else if( cnt>1 && cnt<10 )
                str[i++]= cnt+'0';
        j++;
        if(str[j]) cur_char=str[j];
    }
    if(i!=0){
        if(cnt==1)
        str[i++]=cur_char;
        str[i]='\0';
    }
}


On Saturday, 26 May 2012 04:32:35 UTC+5:30, utsav sharma wrote:
>
> Implement a method to perform basic string compression using the counts of 
> repeated characters.(inplace)
>
> eg:- input: "aaabbbbbcdef"  
>      output:"3a5b1c1d1e1f". 
>
> what should be my approach to this problem
>
> if i calculate the size of array required to store the output string 
> and start from the last of the array then i wldn't get the right answer of 
> above input case.
>
> and if start from front then i wldn't get the right answer of this input 
> case 
> eg:- input: "abcdef" 
>      output: "1a1b1c1d1e1f"
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/algogeeks/-/4LxWHEUJuK8J.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to