CodeGym /Java Blog /சீரற்ற /ஒரு சரத்தை சரிபார்க்க ஜாவா நிரல் ஒரு பாலிண்ட்ரோம்
John Squirrels
நிலை 41
San Francisco

ஒரு சரத்தை சரிபார்க்க ஜாவா நிரல் ஒரு பாலிண்ட்ரோம்

சீரற்ற குழுவில் வெளியிடப்பட்டது
நிரலாக்கத்தில் சில சிக்கல்கள் கிளாசிக் அந்தஸ்தைப் பெற்றுள்ளன. பொதுவாக, இதுபோன்ற பணிகள் கணிதத்துடன் தொடர்புடையவை மற்றும் அவர்கள் கணினி அறிவியல் சிறப்பு மாணவர்களிடமும், நேர்காணல்களில் வேலை தேடுபவர்களிடமும் கேட்பதை மிகவும் விரும்புகிறார்கள். அவை நல்லவை, ஏனென்றால் அவை உங்கள் சிந்தனையை ஒரு ப்ரோக்ராமர் வழியில் சிறப்பாக அமைக்க உதவுகின்றன, அத்துடன் பயிற்சி அளிக்கின்றன. சரம் ஒரு பாலிண்ட்ரோமா என்பதைச் சரிபார்ப்பது அத்தகைய சிக்கல்களில் ஒன்றாகும், மேலும் இந்த கட்டுரையில் அதைக் கருத்தில் கொள்ளப் போகிறோம்.

பாலிண்ட்ரோம் என்றால் என்ன, அவற்றை ஏன் தேட முடியும்

பாலிண்ட்ரோம் என்பது எண், எழுத்து கலவை, சொல் அல்லது உரை ஆகிய இரண்டு திசைகளிலும் ஒரே மாதிரியாகப் படிக்கும். சுருக்கமாக, ஒரு பாலிண்ட்ரோம் அதன் நடுவில் சமச்சீராக இருக்கும் எந்த எழுத்துகளின் தொகுப்பையும் அழைக்கலாம். இந்த வார்த்தை கிரேக்க வேர்களில் இருந்து வந்தது, இது "பின்னால் ஓடுதல்" (பாலின் என்பது "மீண்டும், மீண்டும்," மற்றும் ட்ரோமோஸ், "ஓடுதல்") என்பதிலிருந்து பெறப்பட்டது. ஜாவாவில் பாலிண்ட்ரோம் என்பது பொதுவான பொருளைப் போன்றது. பாலிண்ட்ரோம்களின் எடுத்துக்காட்டுகள்:
  • 1881
  • aakquqqaa
  • பாப்
  • நண்பகல்
  • நிலை
  • சுழலி
  • எனது உடற்பயிற்சி கூடம்
  • மேடம் நான் ஆடம்
  • இப்போது, ​​ஐயா, ஒரு போர் வெற்றி!
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);


   }

}
முக்கிய முறையில், பாலிண்ட்ரோமிக் சரங்களை "நிலை", "கூல்", "மேடம்" மற்றும் "இப்போது, ​​ஐயா, ஒரு போர் வென்றது!". நீங்கள் பார்க்க முடியும் என, முதல், மூன்றாவது மற்றும் நான்காவது பாலிண்ட்ரோம்கள், ஆனால் இரண்டாவது இல்லை. நிரல் என்ன கொடுக்கும்?
நிலை என்பது பாலிண்ட்ரோமா? கூல் என்பது பாலிண்ட்ரோம் என்பது உண்மையா? பொய் மேடம் ஒரு பாலிண்ட்ரோமா? பொய் இப்போது, ​​ஐயா, ஒரு போர் வென்றது! ஒரு பாலிண்ட்ரோம்? பொய்
எனவே, முதல் ஒரு பாலிண்ட்ரோம், இரண்டாவது இல்லை. இருப்பினும், மூன்றாவது மற்றும் நான்காவது தவறு என்ன? முடிவு ஏன் பொய்யானது ? இந்த சரத்தில் உள்ள சில எழுத்துக்கள் பெரிய எழுத்துக்கள் மற்றும் சில சிறிய எழுத்துக்கள் என்று நீங்கள் ஏற்கனவே யூகித்திருக்கலாம், மேலும் Java 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