CodeGym /Java Blog /अनियमित /एक स्ट्रिंग की जाँच करने के लिए जावा प्रोग्राम एक पैलिंड्...
John Squirrels
स्तर 41
San Francisco

एक स्ट्रिंग की जाँच करने के लिए जावा प्रोग्राम एक पैलिंड्रोम है

अनियमित ग्रुप में प्रकाशित
प्रोग्रामिंग में कुछ समस्याओं को क्लासिक का दर्जा प्राप्त है। आमतौर पर, ऐसे कार्य गणित से संबंधित होते हैं और वे साक्षात्कार में कंप्यूटर विज्ञान विशिष्टताओं के छात्रों के साथ-साथ नौकरी चाहने वालों से पूछने के बहुत शौकीन होते हैं। वे अच्छे हैं क्योंकि वे प्रोग्रामर तरीके से आपकी सोच को स्थापित करने में मदद करते हैं, साथ ही इसे प्रशिक्षित भी करते हैं। ऐसी समस्याओं में से एक यह जाँच कर रही है कि क्या कोई स्ट्रिंग पैलिंड्रोम है, और हम इस लेख में इस पर विचार करने जा रहे हैं।

पैलिंड्रोम क्या है और उनकी तलाश क्यों की जा सकती है

विलोमपद एक संख्या, अक्षर संयोजन, शब्द या पाठ है जो दोनों दिशाओं में समान पढ़ता है। संक्षेप में, एक पैलिंड्रोम को वर्णों का कोई भी सेट कहा जा सकता है जो इसके मध्य के बारे में सममित है। यह शब्द ग्रीक मूल से है जिसका शाब्दिक अर्थ है "वापस दौड़ना" (पैलिन "फिर से, पीछे," और ड्रोमोस, "चल रहा है")। जावा में पैलिंड्रोम का अर्थ सामान्य अर्थ के समान है। विलोमपद के उदाहरण:
  • 1881
  • aqquqqa
  • जल्दी से आना
  • दोपहर
  • स्तर
  • अंग को घुमानेवाली पेशी
  • मेरा जिम
  • मैडम मैं एडम हूँ
  • अब, सर, एक युद्ध जीत लिया गया है!
1881 एक विलोमपद संख्या है और अन्य विलोमपद तार हैं। इस लेख में, हम उन पैलिंड्रोमों को देखेंगे जिन्हें स्ट्रिंग्स के रूप में दर्शाया गया है, लेकिन कुछ एल्गोरिदम जावा में अन्य प्रकार के पैलिंड्रोमों पर काफी लागू होते हैं। आप विलोमपदों की तलाश क्यों करना चाहेंगे? वास्तव में, हमें अक्सर दैनिक जीवन में विलोमपदों की तलाश नहीं करनी पड़ती है। यह एक बहुत ही विशिष्ट कार्य है। यदि हम स्ट्रिंग एल्गोरिदम को याद करते हैं, तो अधिक बार व्यवहार में, प्रोग्रामर एक स्ट्रिंग में सबस्ट्रिंग की खोज कर सकते हैं, और पैलिंड्रोम या उनकी संख्या की खोज नहीं कर सकते। हालांकि, पैलिंड्रोम से संबंधित समस्याओं के महत्वपूर्ण अनुप्रयोग हैं। पहला ओलंपियाड प्रोग्रामिंग है। विलोमपदों की पहचान करने के लिए कार्य हो सकते हैं। नौसिखिए प्रोग्रामर के लिए प्रासंगिक दूसरा आवेदन साक्षात्कार है। एक तकनीकी साक्षात्कार में, आपको यह जांचने के लिए जल्दी से एक प्रोग्राम लिखने के लिए कहा जा सकता है कि क्या कोई स्ट्रिंग पैलिंड्रोम है, शायद कागज के एक टुकड़े पर भी। ठीक है, विज्ञान में, पैलिंड्रोम खोजने का सबसे व्यावहारिक अनुप्रयोग जैविक एल्गोरिदम है। विकिपीडिया के अनुसार, जैविक यौगिकों की पैलिंड्रोमाइसिटी विभिन्न जैविक यौगिकों के गुणों में महत्वपूर्ण भूमिका निभाती है।

विलोमपद एल्गोरिथम कोड उदाहरण

हमें सोचना चाहिए। एक स्ट्रिंग वर्णों का एक क्रम है, कोई कह सकता है, चार की एक सरणी। दोनों पक्षों से मध्य तक इस क्रम का अनुसरण करना और चरम वर्णों की तुलना करना सबसे तर्कसंगत होगा। यदि मध्य तक पहुँचने तक हमारे सभी पात्र मेल खाते हैं, तो हमारे पास एक विलोमपद है। स्ट्रिंग पैलिंड्रोम है या नहीं, यह जांचने के लिए आइए एक बूलियन विधि वैलिडपैलिंड्रोम (स्ट्रिंग एस) बनाएं। जावा कोड यहाँ है:

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


   }

}
मुख्य विधि में, हम पैलिंड्रोमिक स्ट्रिंग्स "लेवल", "कूल", "मैडम" और "नाउ, सर, ए वॉर इज़ विन!" की जांच करते हैं। जैसा कि आप देख सकते हैं, पहला, तीसरा और चौथा विलोमपद हैं, लेकिन दूसरा नहीं है। कार्यक्रम क्या देगा?
स्तर एक विलोमपद है? ट्रू इज कूल ए पैलिंड्रोम? झूठा मैडम विलोमपद है? झूठा है अब, श्रीमान, एक युद्ध जीत लिया गया है! एक विलोमपद? असत्य
तो, पहला विलोमपद है, दूसरा नहीं है। हालाँकि, तीसरे और चौथे में क्या गलत है? नतीजा झूठा क्यों है ? आप शायद पहले ही अनुमान लगा चुके हैं कि बिंदु यह है कि इस स्ट्रिंग में कुछ अक्षर अपरकेस हैं और कुछ लोअरकेस हैं, और जावा एम और एम के लिए दो अलग-अलग वर्ण हैं। आइए इस अंतर को ध्यान में रखते हुए कार्यक्रम में सुधार करें। यह जाँचने के लिए एक प्रोग्राम है कि क्या कोई स्ट्रिंग पैलिंड्रोम है जो अपरकेस और लोअरकेस की समस्याओं को हल करता है।

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