Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ Subsequences ของสตริงที่เริ่มด้วยสระและจบด้วยพยัญชนะใน C++

ในปัญหานี้ เราจะได้รับสตริง และต้องหา substring จากสตริงที่กำหนด Substring ที่ต้องการควรเริ่มต้นด้วย สระและจบด้วยตัวอักษรพยัญชนะ

String คือ อาเรย์ของตัวอักษร

Substring ที่จะสร้างในปัญหานี้ สามารถสร้างได้โดยการลบตัวอักษรบางส่วนของสตริง และไม่เปลี่ยนลำดับของสตริง

Input: 'abc'
Output: ab, ac, abc

เพื่อแก้ปัญหานี้ เราจะวนลูปผ่านสตริงและกำหนดสระและตรวจสอบลำดับถัดไป มาดูอัลกอริทึมเพื่อหาคำตอบ:

อัลกอริทึม

ขั้นตอนที่ 1: วนลูปแต่ละตัวอักษรของสตริงด้วยตัวแปร i
ขั้นตอนที่ 2: ถ้าตัวอักษรตัวที่ i เป็นสระ
ขั้นตอนที่ 3: ถ้าตัวอักษรตัวที่ j เป็นพยัญชนะ
ขั้นตอนที่ 4: เพิ่มลง HashSet substring จากตัวอักษรตัวแรกถึงตัวที่ j
ขั้นตอนที่ 5: ทำซ้ำขั้นตอนต่อไปเพื่อหา substrings จากสตริง

โปรแกรมตัวอย่าง

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

set<string> st;
bool isaVowel(char c);
bool isaConsonant(char c);
void findSubSequence(string str);

int main() {
    string s = "abekns";
    findSubSequence(s);
    cout << "The substring generated are :\n";
    for (auto i : st)
        cout << i << " ";
    cout << endl;
    return 0;
}

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

bool isaConsonant(char c) {
    return !isaVowel(c);
}

void findSubSequence(string str) {
    for (int i = 0; i < str.length(); i++) {
        if (isaVowel(str[i])) {
            for (int j = str.length() - 1; j >= i; j--) {
                if (isaConsonant(str[j])) {
                    string str_sub = str.substr(i, j + 1);
                    st.insert(str_sub);
                    for (int k = 1; k < str_sub.length() - 1; k++) {
                        string sb = str_sub;
                        sb.erase(sb.begin() + k);
                        findSubSequence(sb);
                    }
                }
            }
        }
    }
}

ผลลัพธ์

The substring generated are -

ab abek abekn abekns abeks aben abens abes abk abkn abkns abks abn abns abs aek aekn aekns aeks aen aens aes ak akn akns aks an ans as ek ekn ekns eks en ens es