কম্পিউটার টিউটোরিয়াল

C++-এ ব랬 বার ব랬 স্বর ও ব্যঞ্জন স্ট্রিং

সমস্যা বিবরণ

একটি স্ট্রিং দেওয়া আছে। স্ট্রিং-এর ক্যারেক্টার রি-অ্যারেঞ্জ করতে হবে যাতে স্বর (vowel) এবং ব্যঞ্জন (consonant) ব랬 বarlos পজিশনে থাকে। যদি সম্ভব না হয় তবে "no such string" দেখাতে হবে। স্বর ও ব্যঞ্জনগুলো তাদের নিজস্ব অর্ডার রক্ষা করবে। একাধিক সমাধান হলে লেক্সিকোগ্রাফিক্যালি ছোটটি দেখাতে হবে।

উদাহরণ

Input : Tutorial 
Output : Tutorila 
Input : onse 
Output : nose 
(দুটি সম্ভাব্য আউটপুট: "nose" ও "ones", "nose" লেক্সিকোগ্রাফিক্যালি ছোট)

অ্যালগরিদম

  • স্ট্রিং-এ স্বর ও ব্যঞ্জন গণনা করুন।
  • যদি কাউন্টের পার্থক্য >= 2 হয়, "Not Possible" রিটার্ন করুন।
  • স্বর বেশি হলে প্রথম স্বর প্রথমে দেখিয়ে বাকি স্ট্রিং-এ রিকার্সন।
  • ব্যঞ্জন বেশি হলে প্রথম ব্যঞ্জন প্রথমে দেখিয়ে বাকি স্ট্রিং-এ রিকার্সন।
  • দুটি কাউন্ট সমান হলে প্রথম স্বর ও ব্যঞ্জন তুলনা কর ছোটটি প্রথমে দেখান।

C++ কোড উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 

bool isVowel(char ch1) { 
    return (ch1=='a' || ch1=='e' || ch1=='i' || ch1=='o' || ch1=='u'); 
} 

string createAltStr(string str1, string str2, int start1, int l1) { 
    string finalStr1 = ""; 
    for (int i=0, j=start1; j<l1; i++, j++) 
        finalStr1 = (finalStr1 + str1.at(i)) + str2.at(j); 
    return finalStr1; 
} 

string findAltStr(string str3) { 
    int nv1 = 0, nc1 = 0; 
    string vstr1 = "", cstr1 = ""; 
    int l1 = str3.size(); 
    for (int i=0; i<l1; i++) { 
        char ch1 = str3.at(i); 
        if (isVowel(ch1)) { nv1++; vstr1 += ch1; } 
        else { nc1++; cstr1 += ch1; } 
    } 
    if (abs(nv1-nc1) >= 2) return "no such string"; 
    if (nv1 > nc1) 
        return (vstr1.at(0) + createAltStr(cstr1, vstr1, 1, nv1)); 
    if (nc1 > nv1) 
        return (cstr1.at(0) + createAltStr(vstr1, cstr1, 1, nc1)); 
    if (cstr1.at(0) < vstr1.at(0)) 
        return createAltStr(cstr1, vstr1, 0, nv1); 
    return createAltStr(vstr1, cstr1, 0, nc1); 
} 

int main() { 
    string str3 = "Tutorial"; 
    cout << findAltStr(str3); 
    return 0; 
}

আউটপুট

Tutorila

Time Complexity: O(n)

  1. C++-এ স্ট্রিংকে নম্বরে এবং নম্বরকে স্ট্রিংএ কনভার্ট করা

  2. C++ প্রোগ্রাম: অক্ষর Vowel (স্বর) নাকি Consonant (ব্যঞ্জন) যাচাই

  3. C এবং C++-এ স্ট্রিং লিটারেলের টাইপ কী?

  4. C++ স্ট্রিং কনস্ট্যান্ট এবং ক্যারেক্টার কনস্ট্যান্টের পার্থক্য