java, جاوا, حل مسائل با جاوا, ساختمان داده در جاوا

کلمات همریخت در جاوا (Isomorphic Word)

کلمات همریخت در جاوا

در این جلسه تیم کدگیت را با آموزش کلمات همریخت در جاوا (Isomorphic Word) همراهی کنید. پیش نیاز این آموزش شامل موارد زیر است:

  1. آشنایی با hashmap
  2. آشنایی با If
  3. آشنایی با For
  4. آشنایی با متد

کلمات همریخت

دو کلمه را همریخت میگویند اگر بتوان نگاشتی بین آنها یافت. بدین معنا که اگر حروف یکی را جابجا کنیم به کلمه دوم برسیم. با یک مثال ساده این موضوع را شفافتر بیان میکنیم. فرض میکنیم کلمه paper و title را داریم حال میخواهیم بدانیم این دو کلمه همریخت هستند یا خیر؟!! برای این کار نگاشت زیر را انجام میدهیم:

T -> p , i -> a , L -> e , e -> r

همانطور که میبینید اگر جای حرف t ما p قرار دهیم و جای حروف i و L و e به ترتیب حروف a و e و  r قرار دهیم کلمه title به paper تغییر میکند. باید توجه داشت که همه کلمات چنین قابلیتی ندارند. مثلا کلمه foo و bar. در این دو کلمه هیچ نگاشتی نمیتوان یافت.

کلمات همریخت در جاوا

برای پیاده سازی کلمات همریخت در جاوا ما از hashmap استفاده میکنیم. همانطور که میدانید hashmap یک کلید (key) و یک مقدار (value) نگهداری میکند.روشی که در پیاده سازی کلمات همریخت در جاوا استفاده شده به این صورت است که ما تک به تک حروف هر دو کلمه را میگیریم در hashmap میریزیم. حال اگر به حرفی از کلمه رسیدیم که قبلا در hashmap بوده پس حتما باید مقدار (value) آن با حرف کلمه دوم برابری کند.

اگر به حالتی رسیدیم مقدار(value) در hashmap بود ولی کلید نبود پس این دو کلمه همریخت نمیشوند. کد کلمات همریخت در جاوا به صورت زیر است:

     public static boolean isIsomorphic(String s, String t) {
         if(s==null||t==null)
             return false;

         if(s.length()!=t.length())   
             return false;

         HashMap<Character, Character> map = new HashMap<Character, Character>();


         for(int i=0; i<s.length(); i++){
             char c1 = s.charAt(i);
             char c2 = t.charAt(i);

             if(map.containsKey(c1)){
                 if(map.get(c1)!=c2)
                     return false;
             }else{
                 if(map.containsValue(c2))
                     return false;
                 map.put(c1, c2);
             }
         }

         return true;
     }

در کد بالا یک متد به نام isIsomorphic نوشته ایم. این متد دو ورودی میگیرد که همان کلمات ما هستند. خروجی این متد یک boolean است و در صورتی که دو کلمه ورودی همریخت باشند true و در غیر این صورت false برگرداند.

تست کلمات همریخت در جاوا

برای تست کدهای بالا، کد main زیر را بزنید:

public static void main(String[] args) {
          String s = "paper";
          String t = "title";

          boolean isomorphic = isIsomorphic(s, t);
          if (isomorphic) {
              System.out.println(s+" and "+ t+" are isomorphm");
          }else{
              System.out.println(s+" and "+ t+" are not isomorphm");
          }

     }

کد تست شامل 2 متغییر s و t هست. از این دو برای بررسی همریخت بودن استفاده میشود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *