কম্পিউটার

সি প্রোগ্রামে প্যালিনড্রোম তৈরি করতে অক্ষরের সাজানো অবস্থান প্রিন্ট করুন।


আপনাকে কিছু দৈর্ঘ্য n সহ একটি স্ট্রিং স্ট্র প্রদান করা হয়েছে। স্ট্রিংয়ের প্রতিটি উপাদানের অবস্থান প্রিন্ট করুন যাতে এটি একটি প্যালিনড্রোম তৈরি করতে পারে, অন্যথায় স্ক্রিনে "নো প্যালিনড্রোম" বার্তা প্রিন্ট করুন।

প্যালিনড্রোম কি?

প্যালিনড্রোম হল একটি শব্দ, অক্ষরের ক্রম যা সামনের দিক থেকে বিপরীত বা পিছনের দিক থেকে একইভাবে পড়া হয়, যেমন ম্যাডাম, রেসকার।

একটি ক্রম বা একটি শব্দ প্যালিনড্রোম খুঁজে পেতে আমরা সাধারণত একটি পৃথক স্ট্রিং-এ একটি শব্দের বিপরীত অংশ সংরক্ষণ করি এবং উভয়ের তুলনা করি যদি তারা একই হয় তবে প্রদত্ত শব্দ বা ক্রমটি প্যালিনড্রোম। কিন্তু এই প্রশ্নে আমাদের প্যালিনড্রোমে একটি শব্দ বা একটি ক্রম তৈরি করার ব্যবস্থা প্রিন্ট করতে হবে।

যেমন, একটি স্ট্রিং আছে str ="তিন্নি" তারপর এটি intni বা nitin হতে পারে তাই আমাদের বিন্যাসের যেকোন একটিকে সূচী হিসাবে 1 থেকে শুরু করে ফেরত দিতে হবে এবং ফলাফল হতে পারে 2 3 1 4 5 বা 3 2 1 5 দুইটির মধ্যে 4টি।

উপরের সমস্যাটির জন্য নিচের উদাহরণের মত একটি সমাধান প্রয়োজন -

উদাহরণ

Input: string str = “baa”
Output: 2 1 3
Input: string str = “tinni”
Output: 2 3 1 4 5

অ্যালগরিদম

void printPalindromePos(string &str)
START
STEP 1: DECLARE vector<int> pos[MAX]
STEP 2: DECLARE AND ASSIGN n WITH LENGTH OF str
STEP 3: LOOP FOR i = 0 AND i < n AND i++
   pos[str[i]].push_back(i+1)
END LOOP
STEP 4: SET oddCount = 0
STEP 5: DECLARE oddChar
STEP 6: LOOP FOR i=0 AND i<MAX AND i++
   IF pos[i].size() % 2 != 0 THEN,
      INCREMENT oddCount BY 1
      SET oddChar AS i
   END IF
END FOR
STEP 7: IF oddCount > 1 THEN,
   PRINT "NO PALINDROME"
STEP 8: LOOP FOR i=0 AND i<MAX AND i++
   DECRLARE mid = pos[i].size()/2
   LOOP FOR j=0 AND j<mid AND j++
      PRINT pos[i][j]
   END LOOP
END LOOP
STEP 9: IF oddCount > 0 THEN,
   DECLARE AND SET last = pos[oddChar].size() - 1
   PRINT pos[oddChar][last]
   SET pos[oddChar].pop_back();
END IF
STEP 10: LOOP FOR i=MAX-1 AND i>=0 AND i--
   DECLARE AND SET count = pos[i].size()
   LOOP FOR j=count/2 AND j<count AND j++
      PRINT pos[i][j]
STOP

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
// Giving the maximum characters
const int MAX = 256;
void printPalindromePos(string &str){
   //Inserting all positions of characters in the given string.
   vector<int> pos[MAX];
   int n = str.length();
   for (int i = 0; i < n; i++)
      pos[str[i]].push_back(i+1);
      /* find the number of odd elements.Takes O(n) */
   int oddCount = 0;
   char oddChar;
   for (int i=0; i<MAX; i++) {
      if (pos[i].size() % 2 != 0) {
         oddCount++;
         oddChar = i;
      }
   }
   /* Palindrome can't contain more than 1 odd characters */
   if (oddCount > 1)
      cout << "NO PALINDROME";
   /* Print positions in first half of palindrome */
   for (int i=0; i<MAX; i++){
      int mid = pos[i].size()/2;
      for (int j=0; j<mid; j++)
         cout << pos[i][j] << " ";
   }
   // Consider one instance odd character
   if (oddCount > 0){
      int last = pos[oddChar].size() - 1;
      cout << pos[oddChar][last] << " ";
      pos[oddChar].pop_back();
   }
   /* Print positions in second half of palindrome */
   for (int i=MAX-1; i>=0; i--){
      int count = pos[i].size();
      for (int j=count/2; j<count; j++)
      cout << pos[i][j] << " ";
   }
}
int main(){
   string s = "tinni";
   printPalindromePos(s);
   return 0;
}

আউটপুট

যদি আমরা উপরের প্রোগ্রামটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

তৈরি করবে
2 3 1 4 5

  1. একটি অ্যারে প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য সি প্রোগ্রাম

  2. C প্রোগ্রামে তির্যকভাবে নিচের দিকে ম্যাট্রিক্স প্রিন্ট করুন।

  3. সি প্রোগ্রামে দেওয়া ম্যাট্রিক্সে শূন্যের সংখ্যা অনুসারে সাজানো কলামগুলির প্রিন্ট সূচক।

  4. সি প্রোগ্রামে আপেক্ষিক ক্রমে অ্যারের উপাদানগুলির শেষ ঘটনা প্রিন্ট করুন।