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:
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);
}