C++ :: Aufgabe #341

1 Lösung Lösung öffentlich

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ß

Lösungen:

vote_ok
von JKooP (16230 Punkte) - 14.04.2021 um 17:53 Uhr
C++ 17
Quellcode ausblenden 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;
}