CodeGym /جاوا بلاگ /Random-UR /سٹرنگ چیک کرنے کے لیے جاوا پروگرام ایک پیلینڈروم ہے۔
John Squirrels
سطح
San Francisco

سٹرنگ چیک کرنے کے لیے جاوا پروگرام ایک پیلینڈروم ہے۔

گروپ میں شائع ہوا۔
پروگرامنگ میں کچھ مسائل کو کلاسک کا درجہ حاصل ہے۔ عام طور پر ایسے کاموں کا تعلق ریاضی سے ہوتا ہے اور وہ کمپیوٹر سائنس کی خصوصیات کے طالب علموں کے ساتھ ساتھ انٹرویوز میں ملازمت کے متلاشیوں سے پوچھنے کا بہت شوق رکھتے ہیں۔ وہ اچھے ہیں کیونکہ وہ آپ کی سوچ کو پروگرامر انداز میں ترتیب دینے کے ساتھ ساتھ اس کی تربیت کرنے میں بھی مدد کرتے ہیں۔ اس طرح کے مسائل میں سے ایک یہ جانچنا ہے کہ آیا تار ایک پیلینڈروم ہے، اور ہم اس مضمون میں اس پر غور کرنے جا رہے ہیں۔

ایک palindrome کیا ہے اور کیوں ان کو تلاش کرنے کے قابل ہو

پیلینڈروم ایک عدد، حروف کا مجموعہ، لفظ یا متن ہے جو دونوں سمتوں میں ایک جیسا پڑھتا ہے۔ خلاصہ کرنے کے لیے، ایک پیلینڈروم کو حروف کا کوئی بھی مجموعہ کہا جا سکتا ہے جو اس کے وسط میں ہم آہنگ ہو۔ یہ لفظ یونانی جڑوں سے ہے جو لفظی طور پر "پیچھے بھاگنے" سے ماخوذ ہے (پالن "دوبارہ، پیچھے،" اور ڈروموس، "چلنا")۔ جاوا میں پیلینڈروم کا مطلب وہی ہے جو عام معنی میں ہے۔ پیلینڈروم کی مثالیں:
  • 1881
  • aaqquqqaa
  • پاپ
  • دوپہر
  • سطح
  • گھومنے والا
  • میرا جم
  • میڈم میں آدم ہوں۔
  • اب، جناب، جنگ جیت گئی ہے!
1881 ایک پیلینڈروم نمبر ہے اور دیگر پیلینڈروم تار ہیں۔ اس مضمون میں، ہم ان پیلینڈرومز کو دیکھیں گے جن کی نمائندگی تار کے طور پر کی جاتی ہے، لیکن کچھ الگورتھم جاوا میں دیگر قسم کے پیلینڈروم پر کافی لاگو ہوتے ہیں۔ آپ پیلینڈروم کیوں تلاش کرنا چاہتے ہیں؟ درحقیقت، ہمیں اکثر روزمرہ کی زندگی میں پیلینڈروم تلاش کرنے کی ضرورت نہیں ہے۔ یہ ایک خاص قسم کا کام ہے۔ اگر ہم سٹرنگ الگورتھم کو یاد کرتے ہیں، تو اکثر عملی طور پر، پروگرامرز سٹرنگ میں سب اسٹرنگ تلاش کرتے ہوئے تلاش کر سکتے ہیں، اور پیلینڈروم یا ان کی تعداد کو تلاش نہیں کر سکتے۔ تاہم، palindromes سے متعلق مسائل اہم ایپلی کیشنز ہیں. پہلا اولمپیاڈ پروگرامنگ ہے۔ پیلینڈروم کی شناخت کرنے کے کام ہوسکتے ہیں۔ دوسری ایپلیکیشن جو نوسکھئیے پروگرامرز کے لیے متعلقہ ہے وہ ہے انٹرویو کرنا۔ ایک تکنیکی انٹرویو میں، آپ سے فوری طور پر ایک پروگرام لکھنے کے لیے کہا جا سکتا ہے کہ آیا کوئی تار پیلینڈروم ہے، شاید کاغذ کے ٹکڑے پر بھی۔ ٹھیک ہے، سائنس میں، palindromes کو تلاش کرنے کا سب سے زیادہ عملی اطلاق حیاتیاتی الگورتھم ہے۔ وکی پیڈیا کے مطابق، حیاتیاتی مرکبات کی پیلینڈرومیسیٹی مختلف حیاتیاتی مرکبات کی خصوصیات میں اہم کردار ادا کرتی ہے۔

پیلینڈروم الگورتھم کوڈ کی مثال

آئیے سوچتے ہیں۔ ایک تار حروف کی ایک ترتیب ہے، کوئی کہہ سکتا ہے، چار کی ایک صف۔ دونوں اطراف سے درمیان تک اس ترتیب کی پیروی کرنا اور انتہائی حروف کا موازنہ کرنا انتہائی منطقی ہوگا۔ اگر ہم وسط تک پہنچنے تک ہمارے تمام کردار مماثل ہوں گے، تو ہمارے پاس ایک پیلینڈروم ہے۔ آئیے یہ چیک کرنے کے لیے ایک بولین طریقہ validPalindrome(String s) بنائیں کہ آیا String palindrome ہے یا نہیں۔ جاوا کوڈ یہاں ہے:

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


   }

}
مرکزی طریقہ میں، ہم پیلینڈرومک تاروں کی جانچ کرتے ہیں "سطح"، "ٹھنڈا"، "میڈم" اور "اب، جناب، جنگ جیت گئی ہے!"۔ جیسا کہ آپ دیکھ سکتے ہیں، پہلا، تیسرا اور چوتھا palindromes ہیں، لیکن دوسرا نہیں ہے۔ پروگرام کیا دے گا؟
کیا سطح ایک پیلینڈروم ہے؟ کیا ٹھنڈا ایک پیلینڈروم ہے؟ جھوٹی کیا میڈم ایک پیلینڈروم ہے؟ جھوٹ ہے جناب اب جنگ جیت گئی ہے! ایک پیلینڈروم؟ جھوٹا
لہذا، پہلا ایک پیلینڈروم ہے، دوسرا نہیں ہے. تاہم تیسرے اور چوتھے میں کیا حرج ہے؟ نتیجہ غلط کیوں ہے ؟ آپ نے شاید پہلے ہی اندازہ لگا لیا ہے کہ بات یہ ہے کہ اس سٹرنگ میں کچھ حروف بڑے اور کچھ چھوٹے ہیں، اور جاوا کے لیے 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