mulakat sorusu

bir firmanin is basvurusu sirasinda mulakatta soruldu.

soru :

Elimizde sadece harflerden ve boşluklardan oluşan (noktalama işaretleri veya sayılar yok) uzun stringler var. Bu stringlerin içinde bazı harfler tekrar ediyor, mesela ‘a’ harfi 20 farklı indexte bulunabiliyor. Biz, verilen bir sayı kadar veya daha fazla tekrarlanan harfleri silmek istiyoruz. Örnek olarak “2” sayısı verildiğinde, 2 kez ya da daha fazla tekrarlayan harfler string’den çıkarılacak.

ornek:

Elimizdeki string “aaba kouq bux” olduğunu düşünelim. ‘a’ harfi 3 kez, ‘b’ ve ‘u’ harfleri 2’şer kez tekrarlanıyor.

sonuçlarını vermesi beklenmektedir.

Soru:

  • Yukarıda anlatılan özellikleri gerçekleyen bir program yazınız.
  • Programın değişik string ve ‘n’ değerleri için doğru çalıştığını çalıştığını gösteren testler yazınız.
  • Gerekli gördüğünüz yerlere kod içi yorumlar yazınız.
  • Programın okunaklı olması, derlenebiliyor ve çalışabiliyor olması gerekmektedir.

program c’de ve java’da yazildi.

dil : java

package secondChance;

import java.util.HashMap;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        System.out.println(deleteRepeats(2, "asd df sfdg svbzsvda asd"));
    }

    public static String deleteRepeats(int repeatCount, String str) throws IllegalArgumentException {
        // checking given inputs
        if (repeatCount < 2) {
            throw new IllegalArgumentException("repeatCount argument is less then 2!!!");
        }
        if (str == null || str.length() == 0 || str.trim() == "") {
            throw new IllegalArgumentException("given String input is empty!!!");
        }

        Map<Character, Integer> repeatCounter = new HashMap<Character, Integer>();
        String result = "";

        // loop for counting repeats
        for (int i = 0; i < str.length(); i++) {
            if (repeatCounter.get(str.charAt(i)) == null) {
                repeatCounter.put(str.charAt(i), 1);
            } else {
                repeatCounter.put(str.charAt(i), repeatCounter.get(str.charAt(i)) + 1);
            }
        }
        // preparing result string according to repeatCounter map 
        for (int i = 0; i < str.length(); i++) {
            if (repeatCounter.get(str.charAt(i)) < repeatCount) { // check char is suitable for result
                result = result + str.charAt(i);
            }
        }
        return result;
    }
}

dil : c

#include "stdafx.h"
#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<char, int> charCount;
    char test_string[] = { "aa abbb bdbc" }; // test string
    unsigned int repeat_count = 3;         // input repeat count

    char result[1000]; // result string

                         // repeat counter loop
    for (unsigned int i = 0; i<sizeof(test_string) / sizeof(test_string[0]); i++)
    {
        charCount[test_string[i]]++;
    }

    // result string loop
    int j = 0;
    for (unsigned int i = 0; i<sizeof(test_string) / sizeof(test_string[0]); i++)
    {
        if (charCount[test_string[i]] < repeat_count)
        {
            result[j] = test_string[i];
            j++;
        }
    }

    printf("%s", result);
}