CodeGym /جاوا بلاگ /Random-SD /اسٽرنگ کي چيڪ ڪرڻ لاءِ جاوا پروگرام هڪ پيلنڊروم آهي
John Squirrels
سطح
San Francisco

اسٽرنگ کي چيڪ ڪرڻ لاءِ جاوا پروگرام هڪ پيلنڊروم آهي

گروپ ۾ شايع ٿيل
پروگرامنگ ۾ ڪجهه مسئلا کلاسي جي حيثيت رکن ٿا. عام طور تي اهڙا ڪم ميٿميٽڪس سان لاڳاپيل هوندا آهن ۽ اهي ڪمپيوٽر سائنس جي اسپيشلٽيز جي شاگردن سان گڏ انٽرويوز ۾ نوڪري ڳوليندڙن کان پڇڻ جو ڏاڍو شوق هوندو آهي. اهي سٺا آهن ڇو ته اهي توهان جي سوچ کي پروگرامر طريقي سان ترتيب ڏيڻ ۾ مدد ڪن ٿا، انهي سان گڏ ان کي تربيت ڏيو. اهڙن مسئلن مان هڪ اهو آهي ته ڇا هڪ تار هڪ پيلينڊوم آهي، ۽ اسان هن مضمون ۾ ان تي غور ڪرڻ وارا آهيون.

هڪ palindrome ڇا آهي ۽ انهن کي ڳولڻ جي قابل ڇو آهي

هڪ palindrome هڪ عدد، خط ميلاپ، لفظ يا متن آهي جيڪو ٻنهي طرفن ۾ ساڳيو پڙهي ٿو. اختصار ڪرڻ لاءِ، هڪ palindrome ڪردارن جي ڪنهن به سيٽ کي سڏيو وڃي ٿو جيڪو ان جي وچ ۾ برابر آهي. لفظ يوناني جڙ مان آهي جنهن جي لفظي معنيٰ آهي ”هلندڙ پٺتي“ (پالين آهي ”ٻيهر، پوئتي“ ۽ ڊرموس، ”هلندڙ“). جاوا ۾ Palindrome جو مطلب عام طور تي ساڳيو آهي. palindromes جا مثال:
  • 1881
  • عاقققا
  • پاپ
  • دوپڙي
  • سطح
  • گھمائيندڙ
  • منهنجو جم
  • مادام مان آدم آهيان
  • هاڻي، صاحب، جنگ کٽي وئي آهي!
1881 ھڪڙو palindrome نمبر آھي ۽ ٻيا palindrome تار آھن. هن مقالي ۾، اسان ڏسنداسين palindromes جيڪي اسٽرنگ جي طور تي پيش ڪيا ويا آهن، پر ڪجهه الگورتھم جاوا ۾ ٻين قسمن جي پيلنڊرومس تي ڪافي لاڳو ٿين ٿا. توهان شايد پيالينڊرومس کي ڳولڻ چاهيو ٿا؟ حقيقت ۾، اسان کي عام طور تي روزمره جي زندگيء ۾ پيلنڊروم ڳولڻ جي ضرورت ناهي. اهو هڪ تمام خاص ڪم جو قسم آهي. جيڪڏهن اسان اسٽرنگ الگورٿمس کي ياد ڪريون ٿا، گهڻو ڪري عملي طور تي، پروگرامر ڳولهي سگهندا آهن هڪ اسٽرنگ ۾ سب اسٽرنگ جي ڳولا، ۽ نه پيلينڊرومس يا انهن جي تعداد جي ڳولا. تنهن هوندي به، palindromes سان لاڳاپيل مسئلا اهم ايپليڪيشنون آهن. پهرين اولمپياڊ پروگرامنگ آهي. palindromes کي سڃاڻڻ جا ڪم ٿي سگهن ٿا. ٻيو ايپليڪيشن جيڪو لاڳاپيل آهي نوان پروگرامرز لاءِ انٽرويو ڏيڻ. هڪ ٽيڪنيڪل انٽرويو ۾، توهان کي چڱيءَ طرح چيو وڃي ٿو ته جلدي هڪ پروگرام لکڻ لاءِ چيڪ ڪرڻ لاءِ ته ڇا هڪ تار پيلينڊوم آهي، شايد ڪاغذ جي هڪ ٽڪري تي به. خير، سائنس ۾، سڀ کان وڌيڪ عملي ايپليڪيشن پالنڊرومس ڳولڻ جو آهي حياتياتي الگورتھم. وڪيپيڊيا جي مطابق، حياتياتي مرکبات جي palindromicity مختلف حياتياتي مرکبات جي خاصيتن ۾ اهم ڪردار ادا ڪري ٿي.

Palindrome الگورتھم ڪوڊ مثال

اچو ته سوچيو. هڪ اسٽرنگ اکرن جو هڪ سلسلو آهي، ڪو چئي سگهي ٿو، چار جي هڪ صف. اهو سڀ کان وڌيڪ منطقي هوندو ته هن تسلسل کي ٻنهي پاسن کان وچ تائين ۽ انتهائي اکرن جو مقابلو ڪرڻ. جيڪڏهن اسان وچ ۾ پهچون ته اسان جا سڀئي ڪردار ملندا، پوءِ اسان وٽ هڪ پيلنڊروم آهي. اچو ته هڪ boolean طريقو 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 آهن، پر ٻيو نه آهي. پروگرام ڇا ڏيندو؟
ڇا سطح هڪ palindrome آهي؟ سچ پچ ٿڌو آهي؟ ڇا ميڊم هڪ پيلنڊروم غلط آهي؟ ڪوڙ آهي هاڻي، صاحب، جنگ کٽي وئي آهي! هڪ palindrome؟ ڪوڙو
تنهن ڪري، پهريون هڪ palindrome آهي، ٻيو نه آهي. بهرحال، ٽئين ۽ چوٿين سان ڇا غلط آهي؟ نتيجو غلط ڇو آهي ؟ توهان شايد اڳ ۾ ئي اندازو لڳايو آهي ته نقطو اهو آهي ته هن اسٽرنگ ۾ ڪجهه اکر وڏا آهن ۽ ڪجهه ننڍا آهن، ۽ جاوا لاء 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);


   }

}
هن ڀيري نتيجو اسان لاءِ وڌيڪ متوقع آهي:
ڇا سطح هڪ palindrome آهي؟ سچ پچ ٿڌو آهي؟ ڇا ميڊم هڪ پيلنڊروم غلط آهي؟ هاڻي سچ آهي، صاحب، جنگ کٽي وئي آهي! هڪ palindrome؟ ڪوڙو
خير ... بلڪل پيشڪش نه آهي. ”ميڊم“ سان حالتون بهتر ٿي رهيون آهن، پر ڇا اسان جي ڊگهي ۽ خوشيءَ واري پيلنڊروم سان ”هاڻي صاحب، جنگ کٽي وئي!“. اهو بلڪل آسان آهي، جيڪڏهن توهان کي ياد آهي ته سڀئي اسپيس ۽ اوقاف جا نشان ساڳيا آهن جاوا لاءِ اکر. تنهن ڪري اسان کي هن نگراني کي درست ڪرڻ لاء اسان جي الگورتھم کي ٻيهر بهتر ڪرڻ جي ضرورت آهي. اچو ته اسان جي پروگرام کي خالن ۽ اوقاف کي نظرانداز ڪرڻ سيکاريون. آسان لفظ ۾، اسان سڀني غير الفاني انگن اکرن کي نظر انداز ڪريون ٿا. هتي جاوا ۾ سڌريل پيلينڊوم پروگرام آهي.
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);


   }

}
گهٽ ۾ گهٽ نتيجو اهو آهي جيڪو اسان ان مان توقع ڪئي آهي:
ڇا سطح هڪ palindrome آهي؟ سچ پچ ٿڌو آهي؟ ڇا ميڊم هڪ پيلنڊروم غلط آهي؟ هاڻي سچ آهي، صاحب، جنگ کٽي وئي آهي! هڪ palindrome؟ سچو
ٿي سگهي ٿو، جيڪڏهن توهان صرف پروگرام ڪرڻ شروع ڪري رهيا آهيو، اهو توهان لاءِ سمجهڻ ڏکيو آهي ته ڪيئن اسٽرنگ ٽرورسل ۽ موازنہ الگورتھم ڪم ڪن ٿا. يقينن، اهو بهتر آهي ته هن سان معاملو ڪرڻ، پر توهان اکرن جي صف ذريعي هڪ آسان نسخو لکي سگهو ٿا، جيڪو حقيقت ۾ هڪ تار آهي. توھان استعمال ڪري سگھوٿا 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);


   }
}
نتيجو ساڳيو آهي جيئن پهرين مثال ۾
ڇا سطح هڪ palindrome آهي؟ سچ پچ ٿڌو آهي؟ ڇا ميڊم هڪ پيلنڊروم غلط آهي؟ ڪوڙ آهي هاڻي، صاحب، جنگ کٽي وئي آهي! هڪ palindrome؟ ڪوڙو
جيڪڏھن توھان چاھيو، توھان ھن پروگرام کي بھتر ڪري سگھوٿا جيئن اسان پھرين مثال سان ڪيو آھي. جيڪو توهان سکيو ان کي مضبوط ڪرڻ لاءِ، اسان توهان کي اسان جي جاوا ڪورس مان هڪ وڊيو سبق ڏسڻ جي صلاح ڏيون ٿا
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION