CodeGym /Java Blog /এলোমেলো /একটি স্ট্রিং পরীক্ষা করার জন্য জাভা প্রোগ্রাম একটি প্যালি...
John Squirrels
লেভেল 41
San Francisco

একটি স্ট্রিং পরীক্ষা করার জন্য জাভা প্রোগ্রাম একটি প্যালিনড্রোম

এলোমেলো দলে প্রকাশিত
প্রোগ্রামিং এর কিছু সমস্যা ক্লাসিক এর অবস্থা। সাধারণত, এই ধরনের কাজগুলি গণিতের সাথে সম্পর্কিত এবং তারা কম্পিউটার বিজ্ঞানের বিশেষত্বের ছাত্রদের, সেইসাথে সাক্ষাত্কারে চাকরি প্রার্থীদের জিজ্ঞাসা করতে খুব পছন্দ করে। তারা ভাল কারণ তারা আপনার চিন্তাভাবনাকে একটি প্রোগ্রামার উপায়ে বেশ ভালভাবে সেট করতে সাহায্য করে, পাশাপাশি এটিকে প্রশিক্ষণ দেয়। এই ধরনের সমস্যাগুলির মধ্যে একটি হল একটি স্ট্রিং একটি প্যালিনড্রোম কিনা তা পরীক্ষা করা এবং আমরা এই নিবন্ধে এটি বিবেচনা করতে যাচ্ছি।

একটি প্যালিনড্রোম কি এবং কেন তাদের সন্ধান করতে সক্ষম হবেন

একটি প্যালিন্ড্রোম হল একটি সংখ্যা, অক্ষরের সংমিশ্রণ, শব্দ বা পাঠ্য যা উভয় দিকেই একইভাবে পড়ে। সংক্ষেপে বলতে গেলে, একটি প্যালিনড্রোমকে অক্ষরের যেকোন সেট বলা যেতে পারে যা তার মাঝখানে প্রতিসম। শব্দটি গ্রীক শিকড় থেকে এসেছে যা আক্ষরিক অর্থে "দৌড়ে ফিরে যাওয়া" (প্যালিন হল "আবার, পিছনে," এবং ড্রমোস, "দৌড়ানো")। জাভাতে প্যালিনড্রোম মানে সাধারণ অর্থের মতোই। প্যালিনড্রোমের উদাহরণ:
  • 1881
  • aaqquqqaa
  • পপ
  • দুপুর
  • স্তর
  • আবর্তক
  • আমার জিম
  • ম্যাডাম আমি আদম
  • এখন, স্যার, একটি যুদ্ধ জিতেছে!
1881 হল একটি প্যালিনড্রোম সংখ্যা এবং অন্যগুলি হল প্যালিনড্রোম স্ট্রিং। এই নিবন্ধে, আমরা প্যালিনড্রোমগুলি দেখব যা স্ট্রিং হিসাবে উপস্থাপিত হয়, তবে কিছু অ্যালগরিদম জাভাতে অন্যান্য ধরণের প্যালিনড্রোমের ক্ষেত্রে বেশ প্রযোজ্য। কেন আপনি প্যালিনড্রোম খুঁজতে চান? আসলে, দৈনন্দিন জীবনে আমাদের প্রায়শই প্যালিনড্রোমগুলি সন্ধান করতে হয় না। এটা একটা খুব নির্দিষ্ট টাস্ক ধরনের. আমরা যদি স্ট্রিং অ্যালগরিদমগুলি স্মরণ করি, প্রায়শই অনুশীলনে, প্রোগ্রামাররা একটি স্ট্রিংয়ের একটি সাবস্ট্রিং অনুসন্ধান করতে পারে এবং প্যালিনড্রোম বা তাদের সংখ্যা অনুসন্ধান করতে পারে না। যাইহোক, প্যালিনড্রোম সম্পর্কিত সমস্যাগুলির গুরুত্বপূর্ণ প্রয়োগ রয়েছে। প্রথমটি হল অলিম্পিয়াড প্রোগ্রামিং। প্যালিনড্রোম শনাক্ত করার কাজ থাকতে পারে। দ্বিতীয় অ্যাপ্লিকেশন যা নবজাতক প্রোগ্রামারদের জন্য প্রাসঙ্গিক তা হল সাক্ষাত্কার। একটি প্রযুক্তিগত সাক্ষাৎকারে, একটি স্ট্রিং প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য আপনাকে দ্রুত একটি প্রোগ্রাম লিখতে বলা হতে পারে, এমনকি কাগজের টুকরোতেও। ঠিক আছে, বিজ্ঞানে, প্যালিনড্রোমগুলি খুঁজে পাওয়ার সবচেয়ে ব্যবহারিক প্রয়োগ হল জৈবিক অ্যালগরিদম। উইকিপিডিয়ার মতে, জৈবিক যৌগের প্যালিনড্রোমিসিটি বিভিন্ন জৈবিক যৌগের বৈশিষ্ট্যে গুরুত্বপূর্ণ ভূমিকা পালন করে।

প্যালিনড্রোম অ্যালগরিদম কোড উদাহরণ

চল চিন্তা করি. একটি স্ট্রিং অক্ষরের একটি ক্রম, এক বলতে পারে, অক্ষরের একটি অ্যারে. উভয় দিক থেকে মাঝখানে এই ক্রমটি অনুসরণ করা এবং চরম অক্ষরগুলির তুলনা করা সবচেয়ে যুক্তিযুক্ত হবে। যদি আমরা মাঝখানে না পৌঁছানো পর্যন্ত আমাদের সমস্ত অক্ষর মিলে যায়, তাহলে আমাদের একটি প্যালিনড্রোম আছে। স্ট্রিং প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য একটি বুলিয়ান পদ্ধতি validPalindrome(স্ট্রিং s) তৈরি করি। জাভা কোড এখানে:

public class PalindromeTest1 {

//method to check if a string is palindrome    
public static boolean validPalindrome(String s) {
       for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
           if (s.charAt(i) != s.charAt(j)) {
               return false;
           }
       }
       return true;
   }

   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
       String s4 = "Now, sir, a war is won!"
       boolean b1 = validPalindrome(s1);
       boolean b2 = validPalindrome(s2);
       boolean b3 = validPalindrome(s3);
       boolean b4 = validPalindrome(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }

}
প্রধান পদ্ধতিতে, আমরা প্যালিনড্রোমিক স্ট্রিংগুলি "লেভেল", "কুল", "ম্যাডাম" এবং "এখন, স্যার, একটি যুদ্ধ জিতেছে!" পরীক্ষা করি। আপনি দেখতে পাচ্ছেন, প্রথম, তৃতীয় এবং চতুর্থটি প্যালিনড্রোম, তবে দ্বিতীয়টি নয়। প্রোগ্রাম কি দেবে?
স্তর একটি প্যালিনড্রোম? সত্য কি শীতল একটি প্যালিনড্রোম? মিথ্যা ম্যাডাম একটি প্যালিনড্রোম? মিথ্যা এখন, স্যার, একটি যুদ্ধ জিতেছে! একটি প্যালিনড্রোম? মিথ্যা
সুতরাং, প্রথমটি একটি প্যালিনড্রোম, দ্বিতীয়টি নয়। তবে তৃতীয় ও চতুর্থটি কী ভুল? ফলাফল মিথ্যা কেন ? আপনি সম্ভবত ইতিমধ্যেই অনুমান করেছেন যে বিন্দু হল এই স্ট্রিং এর কিছু অক্ষর বড় হাতের এবং কিছু ছোট হাতের, এবং জাভা M এবং m দুটি ভিন্ন অক্ষর। আসুন এই পার্থক্যটি বিবেচনায় নেওয়ার জন্য প্রোগ্রামটিকে উন্নত করি। একটি স্ট্রিং একটি প্যালিনড্রোম যা বড় এবং ছোট হাতের সমস্যা সমাধান করে কিনা তা পরীক্ষা করার জন্য এখানে একটি প্রোগ্রাম রয়েছে।

public class PalindromeTest2 {

   //lowercase and uppercase characters should be treated the same:
   public static boolean validPalindrome(String s) {
       for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
           if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
               return false;
       }
       return true;
   }

   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
        String s4 = "Now, sir, a war is won!"
       boolean b1 = validPalindrome(s1);
       boolean b2 = validPalindrome(s2);
       boolean b3 = validPalindrome(s3);
       boolean b4 = validPalindrome(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }

}
এই সময় ফলাফল আমাদের জন্য আরো অনুমানযোগ্য:
স্তর একটি প্যালিনড্রোম? সত্য কি শীতল একটি প্যালিনড্রোম? মিথ্যা ম্যাডাম একটি প্যালিনড্রোম? সত্য এখন, স্যার, একটি যুদ্ধ জিতেছে! একটি প্যালিনড্রোম? মিথ্যা
ভাল...ঠিক অনুমানযোগ্য নয়। "ম্যাডাম" এর সাথে পরিস্থিতি ভাল হচ্ছে, কিন্তু আমাদের দীর্ঘ এবং সুখী প্যালিনড্রোম "এখন, স্যার, একটি যুদ্ধ জিতেছে!" এটি বেশ সহজ, যদি আপনি মনে রাখেন যে সমস্ত স্পেস এবং বিরাম চিহ্নগুলি জাভার জন্য অক্ষরগুলির মতোই। তাই এই তদারকি সংশোধন করার জন্য আমাদের আবার আমাদের অ্যালগরিদম উন্নত করতে হবে। স্পেস এবং বিরাম চিহ্ন উপেক্ষা করতে আমাদের প্রোগ্রাম শেখান. সহজ কথায়, আমরা সমস্ত নন-আলফানিউমেরিক অক্ষরকে উপেক্ষা করি। এখানে জাভাতে উন্নত প্যালিনড্রোম প্রোগ্রাম রয়েছে।

public class PalindromeTest3 {

   //in addition to the above, ignore all non alphanumeric chars like punctuation and spaces
   private static boolean isAlphanumeric(char c) {
       return Character.isAlphabetic(c) || Character.isDigit(c);
   }

   public static boolean validPalindromeIgnorePunctuation(String s) {
       for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
           // skip chars we should ignore
           while (j >= 0 && !isAlphanumeric(s.charAt(j))) j--;
           while (i < s.length() && !isAlphanumeric(s.charAt(i))) i++;
           // overskipped -> nothing left to validate
           if (i >= j) return true;

           if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
               return false;
       }
       return true;
   }


   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
       String s4 = "Now, sir, a war is won!";
       boolean b1 = validPalindromeIgnorePunctuation(s1);
       boolean b2 = validPalindromeIgnorePunctuation(s2);
       boolean b3 = validPalindromeIgnorePunctuation(s3);
       boolean b4 = validPalindromeIgnorePunctuation(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }

}
অন্তত ফলাফল আমরা এটা থেকে কি আশা করা হয়:
স্তর একটি প্যালিনড্রোম? সত্য কি শীতল একটি প্যালিনড্রোম? মিথ্যা ম্যাডাম একটি প্যালিনড্রোম? সত্য এখন, স্যার, একটি যুদ্ধ জিতেছে! একটি প্যালিনড্রোম? সত্য
সম্ভবত, আপনি যদি সবেমাত্র প্রোগ্রাম করা শুরু করেন, তাহলে স্ট্রিং ট্রাভার্সাল এবং তুলনা অ্যালগরিদমগুলি কীভাবে কাজ করে তা বোঝা আপনার পক্ষে কঠিন। অবশ্যই, এটি মোকাবেলা করা ভাল, তবে আপনি অক্ষরের অ্যারের মাধ্যমে খুব উত্তরণের একটি সরলীকৃত সংস্করণ লিখতে পারেন, যা আসলে একটি স্ট্রিং। একটি স্ট্রিং একটি প্যালিনড্রোম কিনা তা পরীক্ষা করতে আপনি StringBuffer.reverse পদ্ধতি ব্যবহার করতে পারেন। নন-আলফানিউমেরিক চিহ্ন এবং বড় এবং ছোট হাতের অক্ষর পরীক্ষা না করেই সহজতম সংস্করণটি করা যাক।

public class PalindromeTest5 {

   public static boolean validPalindrome(String s) {

       StringBuffer buffer = new StringBuffer(s);
       buffer.reverse();
       String data = buffer.toString();

       if (s.equals(data)) {
           return true;
       }
       return false;
   }
   public static void main(String[] args) {
       String s1 = "level";
       String s2 = "cool";
       String s3 = "Madam";
       String s4 = "Now, sir, a war is won!";
       boolean b1 = validPalindrome(s1);
       boolean b2 = validPalindrome(s2);
       boolean b3 = validPalindrome(s3);
       boolean b4 = validPalindrome(s4);
       System.out.println("is " + s1 + " a palindrome? " + b1);
       System.out.println("is " + s2 + " a palindrome? " + b2);
       System.out.println("is " + s3 + " a palindrome? " + b3);
       System.out.println("is " + s4 + " a palindrome? " + b4);


   }
}
ফলাফলটি প্রথম উদাহরণের মতোই
স্তর একটি প্যালিনড্রোম? সত্য কি শীতল একটি প্যালিনড্রোম? মিথ্যা ম্যাডাম একটি প্যালিনড্রোম? মিথ্যা এখন, স্যার, একটি যুদ্ধ জিতেছে! একটি প্যালিনড্রোম? মিথ্যা
আপনি যদি চান, আপনি এই প্রোগ্রামটিকে উন্নত করতে পারেন যেমন আমরা প্রথম উদাহরণ দিয়ে করেছি। আপনি যা শিখেছেন তা শক্তিশালী করার জন্য, আমরা আপনাকে আমাদের জাভা কোর্স থেকে একটি ভিডিও পাঠ দেখার পরামর্শ দিই
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION