प्रोग्रामिंग में कुछ समस्याओं को क्लासिक का दर्जा प्राप्त है। आमतौर पर, ऐसे कार्य गणित से संबंधित होते हैं और वे साक्षात्कार में कंप्यूटर विज्ञान विशिष्टताओं के छात्रों के साथ-साथ नौकरी चाहने वालों से पूछने के बहुत शौकीन होते हैं। वे अच्छे हैं क्योंकि वे प्रोग्रामर तरीके से आपकी सोच को स्थापित करने में मदद करते हैं, साथ ही इसे प्रशिक्षित भी करते हैं। ऐसी समस्याओं में से एक यह जाँच कर रही है कि क्या कोई स्ट्रिंग पैलिंड्रोम है, और हम इस लेख में इस पर विचार करने जा रहे हैं।
पैलिंड्रोम क्या है और उनकी तलाश क्यों की जा सकती है
विलोमपद एक संख्या, अक्षर संयोजन, शब्द या पाठ है जो दोनों दिशाओं में समान पढ़ता है। संक्षेप में, एक पैलिंड्रोम को वर्णों का कोई भी सेट कहा जा सकता है जो इसके मध्य के बारे में सममित है। यह शब्द ग्रीक मूल से है जिसका शाब्दिक अर्थ है "वापस दौड़ना" (पैलिन "फिर से, पीछे," और ड्रोमोस, "चल रहा है")। जावा में पैलिंड्रोम का अर्थ सामान्य अर्थ के समान है। विलोमपद के उदाहरण:- 1881
- aqquqqa
- जल्दी से आना
- दोपहर
- स्तर
- अंग को घुमानेवाली पेशी
- मेरा जिम
- मैडम मैं एडम हूँ
- अब, सर, एक युद्ध जीत लिया गया है!
विलोमपद एल्गोरिथम कोड उदाहरण
हमें सोचना चाहिए। एक स्ट्रिंग वर्णों का एक क्रम है, कोई कह सकता है, चार की एक सरणी। दोनों पक्षों से मध्य तक इस क्रम का अनुसरण करना और चरम वर्णों की तुलना करना सबसे तर्कसंगत होगा। यदि मध्य तक पहुँचने तक हमारे सभी पात्र मेल खाते हैं, तो हमारे पास एक विलोमपद है। स्ट्रिंग पैलिंड्रोम है या नहीं, यह जांचने के लिए आइए एक बूलियन विधि वैलिडपैलिंड्रोम (स्ट्रिंग एस) बनाएं। जावा कोड यहाँ है:
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);
}
}
नतीजा वही है जो पहले उदाहरण में था
स्तर एक विलोमपद है? ट्रू इज कूल ए पैलिंड्रोम? झूठा मैडम विलोमपद है? झूठा है अब, श्रीमान, एक युद्ध जीत लिया गया है! एक विलोमपद? असत्य
यदि आप चाहें, तो आप इस कार्यक्रम में सुधार कर सकते हैं जैसा कि हमने पहले उदाहरण के साथ किया था। आपने जो सीखा है उसे सुदृढ़ करने के लिए, हमारा सुझाव है कि आप हमारे जावा कोर्स से एक वीडियो सबक देखें
GO TO FULL VERSION