Booking.com Interview Question
Software EngineersCountry: Netherland
Interview Type: Phone Interview
Simple and effective Java solution using while loop:
public String charFrequency(String s) {
String res = "";
int ind = 0;
while (ind < s.length()) {
char cur = s.charAt(ind);
int num = 1;
while (ind < s.length() - 1 && cur == s.charAt(ind + 1)) {
ind++;
num++;
}
ind++;
res += String.format("%s%s", cur, num);
}
return res;
}
Sorry, Ignore my last comment. It was my first answer in careercup. It was showing error message, so I have added comment in all lines.
Please use this one:
my $str = 'abababaabbbaaaaa';
# a1b1a1b1a1b1a2b3a5
my @str = split '', $str;
my $op = '';
my $cnt = 1;
for my $i (0 .. length($str)) {
if ($str[$i] eq $str[$i+1]) {
$cnt++;
} else {
$op .= $str[$i].$cnt;
$cnt = 1;
}
}
print $op;
#include <iostream>
#include <stdlib.h>
#define ARRAY_LENGTH 26
using namespace std;
int charArray[ARRAY_LENGTH] = {0};
int Solve(char* pSouce);
int Print();
void Reset();
void Reset(){ for ( int i = 0; i< ARRAY_LENGTH;i++){ charArray[i] = 0; } }
int Print(){
cout << endl;
char ch = 'a';
for ( int i = 0; i< ARRAY_LENGTH;i++){ cout <<"[" << (char(ch + i)) <<"]:"<< charArray[i] << endl; }
}
int Solve(string pSource){
if ( pSource.length() == 0 ){ return 0; }
for(int i = 0; i< pSource.length();i++){ //Assuming input string is NULL terminated.
int index = 0;
index = abs(pSource.at(i) - 'a');
if ( charArray[index] != 0 ){
charArray[index] +=1;
} else {
charArray[index] = 1;
}
}
return 1;
}
int main(){
string inputStr;
int test_cases = 0;
cin >> test_cases;
for ( int i = 0; i< test_cases; i++){
cin >> inputStr;
cout <<inputStr.c_str();
Solve(inputStr);
Print();
Reset();
}
}
#include <iostream>
#include <stdlib.h>
#define ARRAY_LENGTH 26
using namespace std;
int charArray[ARRAY_LENGTH] = {0};
int Solve(char* pSouce);
int Print();
void Reset();
void Reset(){ for ( int i = 0; i< ARRAY_LENGTH;i++){ charArray[i] = 0; } }
int Print(){
cout << endl;
char ch = 'a';
for ( int i = 0; i< ARRAY_LENGTH;i++){ cout <<"[" << (char(ch + i)) <<"]:"<< charArray[i] << endl; }
}
int Solve(string pSource){
if ( pSource.length() == 0 ){ return 0; }
for(int i = 0; i< pSource.length();i++){ //Assuming input string is NULL terminated.
int index = 0;
index = abs(pSource.at(i) - 'a');
if ( charArray[index] != 0 ){
charArray[index] +=1;
} else {
charArray[index] = 1;
}
}
return 1;
}
int main(){
string inputStr;
int test_cases = 0;
cin >> test_cases;
for ( int i = 0; i< test_cases; i++){
cin >> inputStr;
cout <<inputStr.c_str();
Solve(inputStr);
Print();
Reset();
}
}
If required as follows
input: aabbbbaab;
output: abab
public class RemoveDuplicates {
public static void main(String[] args) {
RemoveDuplicates dup = new RemoveDuplicates();
System.out.println(dup.compress("aabbbbbaab", 1));
}
private String compress(String string, int i) {
// TODO Auto-generated method stub
int start = 0;
char c = string.charAt(start);
String result = "";
while(i < string.length()) {
if(string.charAt(i) == c) {
i++;
} else {
result += c;
c = string.charAt(i);
i++;
}
}
result += c;
return result;
}
}
public class RemoveDuplicates {
public static void main(String[] args) {
RemoveDuplicates dup = new RemoveDuplicates();
System.out.println(dup.compress("aabbbbbaab", 1));
}
private String compress(String string, int i) {
// TODO Auto-generated method stub
int start = 0;
char c = string.charAt(start);
String result = "";
while(i < string.length()) {
if(string.charAt(i) == c) {
i++;
} else {
result += c;
c = string.charAt(i);
i++;
}
}
result += c;
return result;
}
}
public class Repeat {
public static void main (String args[]) {
System.out.println(new Repeat().compress("abababaabbbaaaaa"));
}
public String compress(String string) {
if (string.length() == 0)
return "";
return compress(string, string.charAt(0), 0);
}
private String compress(String string, char c, int count) {
if (string.length() == 0)
return c+""+count+"";
if (string.charAt(0) == c) {
return compress(string.substring(1), c, count + 1);
}else{
if (count == 0)
return c+""+compress(string.substring(1));
return c+""+count+compress(string);
}
}
}
public void charFrequency() {
String s = "aabbbcaghgggfg fhggssssy";
String res = "";
int cons = 1, i=0;
boolean flag = false;
if(s.length()==0)
{
res="Invalid Input";
}
else
{
for(i=0;i<s.length()-1;i++)
{
if(s.charAt(i)==s.charAt(i+1))
{
cons++;
flag = true;
}
else
{
if(flag)
{
res+=s.charAt(i)+String.valueOf(cons);
flag = false;
}
else
{
res+=s.charAt(i)+String.valueOf(cons);
}
cons=1;
}
}
res+=s.charAt(i)+String.valueOf(cons);
System.out.println(res);
}
}
Java using stack:
- Neo February 24, 2017