ในปัญหานี้ เราได้รับอาร์เรย์ของสตริงใน camelcase และรูปแบบ เราต้องพิมพ์สตริงทั้งหมดของอาร์เรย์ที่ตรงกับรูปแบบที่กำหนด
อาร์เรย์ของสตริง เป็นอาร์เรย์ที่องค์ประกอบเป็นประเภทข้อมูลสตริง
เคสอูฐ เป็นวิธีทั่วไปในการตั้งชื่อในการเขียนโปรแกรม ด้วยวิธีนี้อักษรตัวแรกของคำใหม่จะเริ่มต้นด้วยตัวพิมพ์ใหญ่ ส่วนที่เหลือทั้งหมดจะเป็นตัวพิมพ์เล็ก
ตัวอย่าง − iLoveProgramming
ปัญหา - ค้นหาสตริงทั้งหมดที่ตรงกับรูปแบบที่กำหนด
ตัวอย่าง −
Input : “TutorialsPoint” , “ProgrammersPoint” , “ProgrammingLover” , “Tutorials”. Pattern : ‘P’ Output : “TutorialsPoint” , “ProgrammersPoint” , “ProgrammingLover”
คำอธิบาย − เราได้พิจารณาสตริงทั้งหมดที่มี 'P' อยู่ในนั้นแล้ว
เพื่อแก้ปัญหานี้ เราจะเพิ่มคีย์ทั้งหมดของพจนานุกรมลงในแผนผัง จากนั้นใช้อักขระตัวพิมพ์ใหญ่ และประมวลผลคำในต้นไม้และพิมพ์ทั้งหมดที่ตรงกับรูปแบบ
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
TreeNode* children[26];
bool isLeaf;
list<string> word;
};
TreeNode* getNewTreeNode(void){
TreeNode* pNode = new TreeNode;
if (pNode){
pNode->isLeaf = false;
for (int i = 0; i < 26; i++)
pNode->children[i] = NULL;
}
return pNode;
}
void insert(TreeNode* root, string word){
int index;
TreeNode* pCrawl = root;
for (int level = 0; level < word.length(); level++){
if (islower(word[level]))
continue;
index = int(word[level]) - 'A';
if (!pCrawl->children[index])
pCrawl->children[index] = getNewTreeNode();
pCrawl = pCrawl->children[index];
}
pCrawl->isLeaf = true;
(pCrawl->word).push_back(word);
}
void printAllWords(TreeNode* root){
if (root->isLeaf){
for(string str : root->word)
cout << str << endl;
}
for (int i = 0; i < 26; i++){
TreeNode* child = root->children[i];
if (child)
printAllWords(child);
}
}
bool search(TreeNode* root, string pattern){
int index;
TreeNode* pCrawl = root;
for (int level = 0; level <pattern.length(); level++) {
index = int(pattern[level]) - 'A';
if (!pCrawl->children[index])
return false;
pCrawl = pCrawl->children[index];
}
printAllWords(pCrawl);
return true;
}
void findAllMatch(vector<string> dictionary, string pattern){
TreeNode* root = getNewTreeNode();
for (string word : dictionary)
insert(root, word);
if (!search(root, pattern))
cout << "No match found";
}
int main(){
vector<string> dictionary = { "Tutorial" , "TP" , "TutorialsPoint" , "LearnersPoint", "TutorialsPointsPrograming" , "programmingTutorial"};
string pattern = "TP";
findAllMatch(dictionary, pattern);
return 0;
} ผลลัพธ์
TP TutorialsPoint TutorialsPointsPrograming