ในปัญหานี้ เราได้รับอาร์เรย์ของสตริงใน 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