C++ :: Aufgabe #341
1 Lösung

Isomorphe Strings (Mustergleichheit)
Fortgeschrittener - C++
von JKooP
- 06.03.2021 um 17:43 Uhr
Als isomorph bezeichnet man zwei oder mehrere Strings (Texte),
die zwar inhaltlich unterschiedlich sind, aber dennoch das gleiche Muster aufweisen.
Achtung:
Gleiche Buchstaben bedeuten Musterwiederholung! ABAB ist nicht ABCD, aber CDCD.
Beispiele:
s1 = ABBA; s2 = OTTO => true
s1 = PAPER; s2 = TITLE => true
s1 = EGG; s2 = ADD => true
s1 = BADC; s2 = BABA => false
s1 = BBBAAABA; s2 = AAABBBBA => false
Erstelle eine Funktion/Methode, die zwei Strings (Texte) hinsichtlich Isomorphie vergleicht.
Viel Spaß
die zwar inhaltlich unterschiedlich sind, aber dennoch das gleiche Muster aufweisen.
Achtung:
Gleiche Buchstaben bedeuten Musterwiederholung! ABAB ist nicht ABCD, aber CDCD.
Beispiele:
s1 = ABBA; s2 = OTTO => true
s1 = PAPER; s2 = TITLE => true
s1 = EGG; s2 = ADD => true
s1 = BADC; s2 = BABA => false
s1 = BBBAAABA; s2 = AAABBBBA => false
Erstelle eine Funktion/Methode, die zwei Strings (Texte) hinsichtlich Isomorphie vergleicht.
Viel Spaß
Lösungen:
C++ 17
C-Code

#include <iostream> #include <string> #include <vector> #include <tuple> using namespace std; bool is_isomorphic(string, string); int main() { vector<tuple<string, string>> v = { {"ABBA", "OTTO"}, {"PAPER", "TITLE"}, {"EGG", "ADD"}, {"BADC", "BABA"}, {"BBBAAABA", "AAABBBBA"} }; for (const auto& i : v) cout << "{" << get<0>(i) << ", " << get<1>(i) << "} => " << (is_isomorphic(get<0>(i), get<1>(i)) == 1 ? "Wahr" : "Falsch") << endl; } bool is_isomorphic(string s, string t) { if (s.length() != t.length()) return false; char cS[256]{ 0 }; char cT[256]{ 0 }; for (size_t i = 0; i < s.length(); i++) { if (cS[s[i]] != cT[t[i]]) return false; cS[s[i]] = cT[t[i]] = (char)i; } return true; }