5.00 / 1 oy

Java'da bir kelimenin harfleri ile kelime permütasyonu yapmak

Önceki iki soruda sırasıyla önce bir yazıyı tersten yazdırdık, sonra da her bir harfin Java'da ascii kodunu bulma uygulaması yaptık. O zaman gecenin final sorusuna geçebiliriz. Bir kelimenin harflerinin değiştirilerek diğer kelimenin elde edilip edilemeyeceğini kontrol eden bir uygulama yapacağız (Bu işleme anagram adı veriliyor). Biz java'ya iki kelime (string) vereceğiz, java da bize verdiğimiz ilk kelimenin harflerinin değiştirilmesi ile (tüm permütasyonları kontrol ederek) diğer kelimeyi üretmenin mümkün olup olmadığını, bu kontrolü yapan bir metod kullanarak bulacak.

Örneğin:

- TAVA -> AVAT (Doğru)

- TAVA -> TAVV (Yanlış)

Çözüm:

public static void main(String[] args) {
    String yazi1 = "patik";
    String yazi2 = "kitop";
    boolean kontrol=karakterPermutasyonu(yazi1, yazi2);
    
    if (kontrol)
        System.out.println(yazi1+" harflerinin yerlerini değiştirerek "+yazi2+" yazısı elde edilebilir");
    else
        System.out.println(yazi1+" harflerinin yerlerini değiştirerek "+yazi2+" yazısı elde edilemez");
}
public static boolean karakterPermutasyonu(String yazi1, String yazi2) {
    int[] dizi = new int[300];
    
    for (int i = 0; i < yazi1.length(); i++) {
        dizi[(int) yazi1.charAt(i)] += 1;
    }

    for (int i = 0; i < yazi2.length(); i++) {
        dizi[(int) yazi2.charAt(i)] -= 1;
    }
    
    for (int i = 0; i < dizi.length; i++) {
        if (dizi[i] != 0) 
            return false;
    }
return true;
}

Çıktı:

patik harflerinin yerlerini değiştirerek kitop yazısı elde edilemez

 

Çıktı 2: (yazi2="kitap" olarak değiştirildiğinde)

patik harflerinin yerlerini değiştirerek kitap yazısı elde edilebilir

Kodlara ilişkin algoritma açıklaması:

- karakterPermutasyonu metodu 2 adet String parametresi almaktadır: yazi1 ve yazi2

- Çözümü ascii kodları üzerinden sağlıyoruz, şöyle ki. 300 adet ascii kodunun yeterli olacağını düşünerek bir dizi tanımlıyoruz ve bu dizinin başlangıç elemanları Java tarafından 0 olarak atanmış oluyor.

- Önce yazi2 değişkeninin (yazi da olsa olurdu-sırası fark etmez) tüm harflerini ascii koduna dönüştürerek dizideki ilgili değeri 1 artıyoruz, bir nevi frekans vektörü olarak düşünebilirsiniz bunu. Bir benzerini zar örneğinde de yapmıştık.

- Sonra yazi değişkeninde de aynı işlemi yapıyoruz fakat bu sefer her bir dönüşüm sonrası dizideki ilgili elemandan 1 çıkartıyoruz.

- Sonuç olarak dizinin tüm elemanları eğer 0 ise artırıldığı kadar azaltılmıştır, dolayısıyla aynı harfler kullanılmıştır diyoruz ve metod true değer döndürüyor.

 

utku33

12.02.2020 03:08

Bu soru henüz yanıtlanmamış.

Bu soruya sadece kayıtlı kullanıcılar yanıt yazabilirler. Yanıt yazmak için lütfen giriş yapınız.

Reitix
Java'da bir kelimenin harfleri ile kelime permütasyonu yapmak

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.