Inhaltsverzeichnis
Methode 1
Algorithmus
Beispiel
Ausgabe
Heim Backend-Entwicklung C++ Die längste Teilsequenz, deren Zeichen mit der Teilzeichenfolge identisch sind und deren Häufigkeitsunterschied höchstens K beträgt

Die längste Teilsequenz, deren Zeichen mit der Teilzeichenfolge identisch sind und deren Häufigkeitsunterschied höchstens K beträgt

Sep 09, 2023 am 09:09 AM
字符 频率 Kinderordnung

Die längste Teilsequenz, deren Zeichen mit der Teilzeichenfolge identisch sind und deren Häufigkeitsunterschied höchstens K beträgt

In diesem Problem ermitteln wir die maximale Länge der Teilsequenz so, dass sie aufeinanderfolgende Zeichen enthält und der Häufigkeitsunterschied aller Zeichen K nicht überschreitet.

Wir müssen alle möglichen Teilsequenzen einer bestimmten Zeichenfolge finden und prüfen, ob sie alle Zeichen nacheinander und mit maximalem Häufigkeitsunterschied enthält, um die Ausgabe zu erhalten.

Problemstellung- Wir erhalten eine Zeichenfolge alpha, die Kleinbuchstaben enthält. Zusätzlich wurde uns eine positive ganze Zahl K gegeben. Wir müssen die maximale Länge einer Teilsequenz einer bestimmten Zeichenfolge ermitteln, damit sie den folgenden Regeln folgt.

  • Alle Vorkommen eines bestimmten Zeichens sollten aufeinanderfolgend sein.

  • Der Unterschied in der Zeichenhäufigkeit darf nicht größer als K sein.

Beispiel

Eintreten

alpha = "ppppqrs", K = 2
Nach dem Login kopieren

Ausgabe

6
Nach dem Login kopieren

Erklärung – Wir können die Teilsequenz „pppqrs“ verwenden. Die maximale Zeichenhäufigkeit beträgt 3 und die minimale Zeichenhäufigkeit beträgt 1. Daher beträgt die Differenz 2. Und es enthält alle Zeichen nacheinander.

Eintreten

alpha = "abbbbc", K = 2
Nach dem Login kopieren

Ausgabe

5
Nach dem Login kopieren

Erklärung – Wir können die Teilsequenz „abbbc“ verwenden.

Eintreten

alpha = "mnnnnnnno", k = 3;
Nach dem Login kopieren

Ausgabe

7
Nach dem Login kopieren

Erklärung – Wir können die Teilsequenz „nnnnnnn“ verwenden.

Methode 1

Bei dieser Methode verwenden wir eine rekursive Funktion, um alle Teilfolgen einer bestimmten Länge zu finden. Darüber hinaus werden wir Funktionen definieren, um zu prüfen, ob eine Teilsequenz alle Zeichen nacheinander enthält. Wir werden die Kartendatenstruktur verwenden, um die maximalen und minimalen Häufigkeitsunterschiede zu berechnen.

Algorithmus

Schritt 1 – Definieren Sie die „f“-Karte, um die Häufigkeit von Zeichen zu speichern.

Schritt 2 – Wenn start gleich der Länge der temporären Zeichenfolge ist und die Zeichenfolgenlänge größer als 0 ist, befolgen Sie diese Schritte.

Schritt 3 – Initialisieren Sie die Variablen „minf“ und „maxf“, um die minimalen und maximalen Frequenzen zu speichern.

Schritt 4 – Löschen Sie die Karte und speichern Sie die Häufigkeit jedes Zeichens in der Karte.

Schritt 5 – Durchlaufen Sie die Kartenwerte und ermitteln Sie die maximalen und minimalen Häufigkeitswerte.

Schritt 6 – Wenn die maximale und minimale Frequenzdifferenz kleiner oder gleich K ist, prüfen Sie, ob die Zeichenfolge aufeinanderfolgende Zeichen enthält.

Schritt 6.1 – Definieren Sie in der Funktion checkForContinously() die Karte „pos“, um die letzte Position eines bestimmten Zeichens zu speichern.

Schritt 6.2 – Schleife durch die Schnur. Wenn das aktuelle Zeichen in der Karte vorhanden ist und der Unterschied zwischen der aktuellen Position des Zeichens und der letzten Position weniger als 1 beträgt, aktualisieren Sie die letzte Position. Andernfalls wird false zurückgegeben.

Schritt 6.3 – Fügen Sie den Charakter zur Karte hinzu, falls er nicht vorhanden ist.

Schritt 6.4 – Endlich true zurückgeben.

Schritt 7 – Wenn die Zeichenfolge aufeinanderfolgende Zeichen enthält und der Häufigkeitsunterschied weniger als K beträgt, aktualisieren Sie den Wert von „maxi“, wenn der Wert von „maxi“ kleiner als die Länge der aktuellen Teilsequenz ist.

Schritt 8 – Führen Sie einen rekursiven Aufruf durch, nachdem Sie das aktuelle Zeichen ausgeschlossen haben.

Schritt 9 – Hängen Sie das aktuelle Zeichen an das Ende der temporären Zeichenfolge an. Führen Sie außerdem einen rekursiven Aufruf mit der aktualisierten Zeichenfolge „tmp“ durch.

Beispiel

#include <bits/stdc++.h>
using namespace std;

int maxi = 0;
// Check for continuous characters in the substring
bool CheckForContinuous(string &tmp) {
    // map to store the last index of the character
    unordered_map<char, int> pos;
    for (int p = 0; p < tmp.length(); p++) {
        // When the last index exists in the map
        if (pos[tmp[p]]) {
            // If the last index is adjacent to the current index
            if (p - pos[tmp[p]] + 1 <= 1)
                pos[tmp[p]] = p + 1;
            else
                return false;
        } else {
            // When the map doesn't have a character as a key
            pos[tmp[p]] = p + 1;
        }
    }
    return true;
}
void getLongestSubSeq(string &alpha, string tmp, int start, int &k) {
    // To store the character's frequency
    unordered_map<char, int> f;
    if (start == alpha.length()) {
        if (tmp.length() > 0) {
            // To store minimum and maximum frequency of characters
            int minf = INT_MAX, maxf = INT_MIN;
            // Make map empty
            f.clear();
            // Store frequency of characters in the map
            for (int p = 0; p < tmp.length(); p++)
                f[tmp[p]]++;

            // Get minimum and maximum value from the map
            for (auto &key : f) {
                minf = min(minf, key.second);
                maxf = max(maxf, key.second);
            }
            // Validate substring for frequency difference and continuous characters
            if (maxf - minf <= k && CheckForContinuous(tmp))
                maxi = max(maxi, (int)tmp.length());
        }
        return;
    }
    // Exclude current character
    getLongestSubSeq(alpha, tmp, start + 1, k);
    // Include current character
    tmp.push_back(alpha[start]);
    getLongestSubSeq(alpha, tmp, start + 1, k);
}
int main() {
    string alpha = "ppppqrs", tmp;
    int k = 2;
    getLongestSubSeq(alpha, tmp, 0, k);
    cout <<"The maximum length of the substring according to the given conditions is " << maxi;
    return 0;
}
Nach dem Login kopieren

Ausgabe

The maximum length of the substring according to the given conditions is 6
Nach dem Login kopieren

Zeitkomplexität – O(N*2N), wobei O(N) zum Überprüfen aufeinanderfolgender Zeichen und O(2N) zum Finden aller Teilsequenzen dient.

Raumkomplexität – O(N) zum Speichern temporärer Teilsequenzen.

Wir verwenden eine einfache Methode, um alle Teilsequenzen einer bestimmten Zeichenfolge zu finden. Dies ist jedoch sehr zeitaufwändig. Es wird nicht empfohlen, diese Methode zur Lösung des Problems mit großen Zeichenfolgen zu verwenden.

Das obige ist der detaillierte Inhalt vonDie längste Teilsequenz, deren Zeichen mit der Teilzeichenfolge identisch sind und deren Häufigkeitsunterschied höchstens K beträgt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1672
14
PHP-Tutorial
1276
29
C#-Tutorial
1256
24
So geben Sie Pfeile in Word ein So geben Sie Pfeile in Word ein Apr 16, 2023 pm 11:37 PM

So verwenden Sie AutoKorrektur zum Eingeben von Pfeilen in Word Eine der schnellsten Möglichkeiten, Pfeile in Word einzugeben, ist die Verwendung der vordefinierten AutoKorrektur-Verknüpfungen. Wenn Sie eine bestimmte Zeichenfolge eingeben, wandelt Word diese Zeichen automatisch in Pfeilsymbole um. Mit dieser Methode können Sie viele verschiedene Pfeilstile zeichnen. So geben Sie mit der AutoKorrektur einen Pfeil in Word ein: Bewegen Sie den Cursor an die Stelle im Dokument, an der der Pfeil erscheinen soll. Geben Sie eine der folgenden Zeichenkombinationen ein: Wenn Sie nicht möchten, dass Ihre Eingabe in ein Pfeilsymbol umgewandelt wird, drücken Sie dazu die Rücktaste auf Ihrer Tastatur

Verwenden Sie die Java-Funktion Character.isDigit(), um festzustellen, ob ein Zeichen eine Zahl ist Verwenden Sie die Java-Funktion Character.isDigit(), um festzustellen, ob ein Zeichen eine Zahl ist Jul 27, 2023 am 09:32 AM

Verwenden Sie die Funktion Character.isDigit() von Java, um festzustellen, ob es sich bei einem Zeichen um ein numerisches Zeichen handelt. Zeichen werden intern im Computer in Form von ASCII-Codes dargestellt. Unter diesen sind die ASCII-Codewerte, die den numerischen Zeichen 0 bis 9 entsprechen, 48 bis 57. Um festzustellen, ob ein Zeichen eine Zahl ist, können Sie die von der Character-Klasse in Java bereitgestellte Methode isDigit() verwenden. Die Methode isDigit() gehört zur Klasse Character

Wie gibt man auf dem iPhone und Mac erweiterte Zeichen wie das Gradzeichen ein? Wie gibt man auf dem iPhone und Mac erweiterte Zeichen wie das Gradzeichen ein? Apr 22, 2023 pm 02:01 PM

Ihre physische oder numerische Tastatur bietet eine begrenzte Anzahl von Zeichenoptionen auf der Oberfläche. Es gibt jedoch mehrere Möglichkeiten, auf dem iPhone, iPad und Mac auf Buchstaben mit Akzent, Sonderzeichen und mehr zuzugreifen. Mit der Standard-iOS-Tastatur haben Sie schnellen Zugriff auf Groß- und Kleinbuchstaben, Standardzahlen, Satzzeichen und Zeichen. Natürlich gibt es noch viele andere Charaktere. Sie können zwischen Buchstaben mit diakritischen Zeichen und auf dem Kopf stehenden Fragezeichen wählen. Möglicherweise sind Sie auf ein verstecktes Sonderzeichen gestoßen. Wenn nicht, erfahren Sie hier, wie Sie auf iPhone, iPad und Mac darauf zugreifen können. So greifen Sie auf erweiterte Zeichen auf dem iPhone und iPad zu. Es ist sehr einfach, erweiterte Zeichen auf Ihrem iPhone oder iPad zu erhalten. Unter „Informationen“:

Was hat einen größeren Einfluss auf Leistung, Speicherfrequenz oder Timing? Was hat einen größeren Einfluss auf Leistung, Speicherfrequenz oder Timing? Feb 19, 2024 am 08:58 AM

Der Speicher ist eine der wichtigsten Komponenten des Computers und hat einen erheblichen Einfluss auf die Leistung und Stabilität des Computers. Bei der Wahl des Gedächtnisses konzentrieren sich Menschen in der Regel auf zwei wichtige Parameter, nämlich Timing und Häufigkeit. Was ist also für die Gedächtnisleistung wichtiger: Timing oder Frequenz? Lassen Sie uns zunächst die Konzepte von Timing und Frequenz verstehen. Unter Timing versteht man das Zeitintervall, das ein Speicherchip benötigt, um Daten zu empfangen und zu verarbeiten. Sie wird normalerweise durch einen CL-Wert (CASLatency) dargestellt. Je kleiner der CL-Wert, desto schneller ist die Speicherverarbeitungsgeschwindigkeit. Die Frequenz liegt innerhalb

Richtige Art und Weise, chinesische Schriftzeichen in Matplotlib anzuzeigen Richtige Art und Weise, chinesische Schriftzeichen in Matplotlib anzuzeigen Jan 13, 2024 am 11:03 AM

Die korrekte Anzeige chinesischer Zeichen in Matplotlib ist ein Problem, auf das viele chinesische Benutzer häufig stoßen. Standardmäßig verwendet matplotlib englische Schriftarten und kann chinesische Zeichen nicht korrekt anzeigen. Um dieses Problem zu lösen, müssen wir die richtige chinesische Schriftart festlegen und diese auf matplotlib anwenden. Nachfolgend finden Sie einige spezifische Codebeispiele, die Ihnen dabei helfen, chinesische Schriftzeichen in matplotlib korrekt anzuzeigen. Zuerst müssen wir die erforderlichen Bibliotheken importieren: importmatplot

ASUS TUF Z790 Plus ist mit der ASUS MCP79-Speicherfrequenz kompatibel ASUS TUF Z790 Plus ist mit der ASUS MCP79-Speicherfrequenz kompatibel Jan 03, 2024 pm 04:18 PM

Das ASUS tufz790plus unterstützt die Speicherfrequenz. Das ASUS TUFZ790-PLUS-Motherboard ist ein Hochleistungs-Motherboard, das Dual-Channel-DDR4-Speicher unterstützt und bis zu 64 GB Speicher unterstützt. Seine Speicherfrequenz ist mit bis zu 4800 MHz sehr leistungsstark. Spezifische unterstützte Speicherfrequenzen umfassen 2133 MHz, 2400 MHz, 2666 MHz, 2800 MHz, 3000 MHz, 3200 MHz, 3600 MHz, 3733 MHz, 3866 MHz, 4000 MHz, 4133 MHz, 4266 MHz, 4400 MHz, 4533 MHz, 4600 MHz, 4733 MHz und 4800 MHz. Ob im täglichen Gebrauch oder bei hohen Leistungsanforderungen

So wenden Sie Formatierungsoptionen für hochgestellte und tiefgestellte Zeichen in Microsoft Excel an So wenden Sie Formatierungsoptionen für hochgestellte und tiefgestellte Zeichen in Microsoft Excel an Apr 14, 2023 pm 12:07 PM

Bei einem hochgestellten Zeichen handelt es sich um ein oder mehrere Zeichen, entweder Buchstaben oder Zahlen, die Sie etwas über der normalen Textzeile platzieren müssen. Wenn Sie beispielsweise „1st“ schreiben müssen, muss der Buchstabe „st“ etwas höher sein als der Buchstabe „1“. Ebenso ist ein Index eine Gruppe von Zeichen oder ein einzelnes Zeichen und muss etwas niedriger als die normale Textebene eingestellt werden. Wenn Sie beispielsweise eine chemische Formel schreiben, müssen Sie die Zahlen unterhalb der normalen Zeichenzeile platzieren. Die folgenden Screenshots zeigen einige Beispiele für die hochgestellte und tiefgestellte Formatierung. Obwohl es wie eine entmutigende Aufgabe erscheinen mag, ist die Anwendung der hoch- und tiefgestellten Formatierung auf Ihren Text eigentlich ganz einfach. In diesem Artikel erklären wir in einigen einfachen Schritten, wie Sie Text ganz einfach mit Hoch- oder Tiefstellung formatieren können. Ich hoffe, Ihnen hat die Lektüre dieses Artikels gefallen. So wenden Sie hochgestellte Zeichen in Excel an

So überprüfen Sie die Frequenz von DDR4 So überprüfen Sie die Frequenz von DDR4 Feb 01, 2024 am 09:42 AM

Der größte Einfluss von DDR4-Speichersticks auf Computer ist die Frequenz, und viele Benutzer wissen nicht, wie sie die Frequenz überprüfen können. Tatsächlich können Sie sie über die CPU-Software überprüfen, und alle Aspekte der Informationen werden sehr detailliert angezeigt. So überprüfen Sie die Frequenz von DDR4: 1. Sie müssen sie zuerst über die Software überprüfen. Sie können sie mit CPU-z überprüfen. 2. Wenn Sie fertig sind, öffnen Sie es und klicken Sie auf „Speicher“. 3. Zu diesem Zeitpunkt können Sie die „Häufigkeit“ unten sehen.

See all articles