मान लीजिए कि हमारे पास समान लंबाई के दो तार हैं, हमें किसी भी वर्ण को हटाए बिना दो स्ट्रिंग विपर्यय बनाने के लिए आवश्यक न्यूनतम संख्या में परिवर्तन करना होगा। विपर्यय दो तार होते हैं जिनमें वर्णों का एक ही सेट होता है। मान लीजिए कि दो स्ट्रिंग "हैलो" हैं, और "वर्ल्ड" यहां आवश्यक परिवर्तनों की संख्या 3 है, क्योंकि इस मामले में तीन वर्ण भिन्न हैं।
विचार सरल है, हमें पहली स्ट्रिंग में प्रत्येक वर्ण की आवृत्ति का पता लगाना है, फिर दूसरी स्ट्रिंग के माध्यम से जाना है, यदि दूसरी स्ट्रिंग में वर्ण मौजूद हैं, आवृत्ति सरणी में, तो आवृत्ति मान घटाएं। अगर फ़्रीक्वेंसी मान 0 से कम है, तो फ़ाइनल काउंट को 1 से बढ़ाएँ।
उदाहरण
#include <iostream> using namespace std; int countAlteration(string str1, string str2) { int count = 0; int frequency[26]; for (int i = 0; i < 26; i++){ frequency[i] = 0; } for (int i = 0; i < str1.length(); i++) frequency[str1[i] - 'A']++; for (int i = 0; i < str2.length(); i++){ frequency[str2[i] - 'A']--; if (frequency[str2[i] - 'A'] < 0) count++; } return count; } int main() { string s1 = "HELLO", s2 = "WORLD"; cout << "Number of required alteration: " << countAlteration(s1, s2); }
आउटपुट
Number of required alteration: 3