پروگرامنگ ۾ ڪجهه مسئلا کلاسي جي حيثيت رکن ٿا. عام طور تي اهڙا ڪم ميٿميٽڪس سان لاڳاپيل هوندا آهن ۽ اهي ڪمپيوٽر سائنس جي اسپيشلٽيز جي شاگردن سان گڏ انٽرويوز ۾ نوڪري ڳوليندڙن کان پڇڻ جو ڏاڍو شوق هوندو آهي. اهي سٺا آهن ڇو ته اهي توهان جي سوچ کي پروگرامر طريقي سان ترتيب ڏيڻ ۾ مدد ڪن ٿا، انهي سان گڏ ان کي تربيت ڏيو. اهڙن مسئلن مان هڪ اهو آهي ته ڇا هڪ تار هڪ پيلينڊوم آهي، ۽ اسان هن مضمون ۾ ان تي غور ڪرڻ وارا آهيون.
هڪ palindrome ڇا آهي ۽ انهن کي ڳولڻ جي قابل ڇو آهي
هڪ palindrome هڪ عدد، خط ميلاپ، لفظ يا متن آهي جيڪو ٻنهي طرفن ۾ ساڳيو پڙهي ٿو. اختصار ڪرڻ لاءِ، هڪ palindrome ڪردارن جي ڪنهن به سيٽ کي سڏيو وڃي ٿو جيڪو ان جي وچ ۾ برابر آهي. لفظ يوناني جڙ مان آهي جنهن جي لفظي معنيٰ آهي ”هلندڙ پٺتي“ (پالين آهي ”ٻيهر، پوئتي“ ۽ ڊرموس، ”هلندڙ“). جاوا ۾ Palindrome جو مطلب عام طور تي ساڳيو آهي. palindromes جا مثال:- 1881
- عاقققا
- پاپ
- دوپڙي
- سطح
- گھمائيندڙ
- منهنجو جم
- مادام مان آدم آهيان
- هاڻي، صاحب، جنگ کٽي وئي آهي!
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؟ ڪوڙو
جيڪڏھن توھان چاھيو، توھان ھن پروگرام کي بھتر ڪري سگھوٿا جيئن اسان پھرين مثال سان ڪيو آھي. جيڪو توهان سکيو ان کي مضبوط ڪرڻ لاءِ، اسان توهان کي اسان جي جاوا ڪورس مان هڪ وڊيو سبق ڏسڻ جي صلاح ڏيون ٿا
GO TO FULL VERSION