Inhaltsverzeichnis
String-Dekodierung
Methode 1: Stapel (Java)
3 Beenden Sie die Operation der linken Klammer und setzen Sie die Anzahl der Produkte auf Null, i = die Position, an der sich die letzte befindet rechte Klammer berührt. Fügen Sie weiterhin die restlichen Zeichen außerhalb der rechten Klammer hinzu.
Heim Java javaLernprogramm Wie verwende ich den Go Java-Algorithmus zur String-Dekodierung?

Wie verwende ich den Go Java-Algorithmus zur String-Dekodierung?

Apr 25, 2023 pm 11:52 PM
java go

String-Dekodierung

Gibt bei einer gegebenen codierten Zeichenfolge die decodierte Zeichenfolge zurück.

Die Kodierungsregel lautet: k[encoded_string], was bedeutet, dass der encoded_string in den eckigen Klammern k-mal wiederholt wird. Beachten Sie, dass k garantiert eine positive ganze Zahl ist.

Sie können davon ausgehen, dass die Eingabezeichenfolge immer gültig ist; die Eingabezeichenfolge enthält keine zusätzlichen Leerzeichen und die eingegebenen eckigen Klammern erfüllen immer die Formatanforderungen.

Darüber hinaus können Sie davon ausgehen, dass die Originaldaten keine Zahlen enthalten, sondern nur die Anzahl der Wiederholungen k. Es wird beispielsweise keine Eingabe wie 3a oder 2 geben.

  • Beispiel 1:

Eingabe: s = „3[a]2[bc]“

Ausgabe: „aaabcbc“

  • Beispiel 2:

Eingabe: s = „3[a2[c]]“

Ausgabe: „ccaccacc“

  • Beispiel 3:

Eingabe: s = „2[abc]3[cd]ef“

Ausgabe: „abcabccdcdcdef "

  • Beispiel 4:

Eingabe: s = "abc3[cd]xyz"

Ausgabe: "abccdcdcdxyz"

Methode 1: Stapel (Java)

Sehen Sie sich die Zuordnung von Klammern an, Das erste, was mir in den Sinn kommen sollte, ist, den Stack zur Lösung des Problems zu verwenden.

Da die Nummer mehr als eine Ziffer haben kann, können Sie aus Gründen der Übersichtlichkeit und Bequemlichkeit zunächst zwei Stapel verwenden, einen zum Speichern von Zahlen und einen zum Speichern von Zeichen. Wenn ein anderes Zeichen als ] angetroffen wird, wird es zuerst in den Zeichenstapel eingefügt. Wenn eine Zahl angetroffen wird, wird die vollständige Zahl umgewandelt und in den Zahlenstapel eingefügt. Wenn ] angetroffen wird, werden die Zeichen bis zu [ herausgeholt Erstellen Sie aus dem Zeichenstapel eine temporäre Zeichenfolge und entfernen Sie das oberste Element des Zahlenstapels. Wiederholen Sie die temporäre Zeichenfolge so oft und legen Sie sie dann wieder in den Zeichenstapel ein.

Nachdem die ursprüngliche Zeichenfolge von links nach rechts durchlaufen wurde, ist das Element im Stapel die endgültige Antwort ) Und schieben Sie es auf den Stapel

    Wenn das aktuelle Zeichen ein Buchstabe oder eine linke Klammer ist, schieben Sie es direkt auf den Stapel
  • Wenn das aktuelle Zeichen eine rechte Klammer ist, beginnen Sie damit, es vom Stapel zu entfernen, bis das Die Reihenfolge, in der die linke Klammer geknallt wird, wird umgekehrt. Für eine Zeichenfolge ist die zu diesem Zeitpunkt herausgenommene Zahl oben auf dem Stapel die Häufigkeit, mit der diese Zeichenfolge angezeigt werden soll Zahl und die Zeichenfolge und schiebe sie auf den Stapel. Daher können wir darüber nachdenken, die Rekursion zu verwenden, um es zu vervollständigen. Spezifische rekursive Ideen finden Sie unten.
  • Das Verschachtelungsproblem zwischen mehreren Klammern muss gelöst werden. Das heißt, überlappende Teilprobleme. Sie können Stapel oder Rekursion verwenden, um Probleme zu lösen.

  • 1. Identifizieren Sie zunächst die Position, an der die rechte Klammer endet.

2. Wenn Sie auf eine linke Klammer stoßen, wird i+1 an das nächste Mal übergeben.

3 Beenden Sie die Operation der linken Klammer und setzen Sie die Anzahl der Produkte auf Null, i = die Position, an der sich die letzte befindet rechte Klammer berührt. Fügen Sie weiterhin die restlichen Zeichen außerhalb der rechten Klammer hinzu.

Spezifische Idee: Analysieren Sie die Zeichenfolge von links nach rechts:

  • Wenn die aktuelle Position eine Ziffer ist, muss sie eine Zeichenfolge enthalten, die durch eckige Klammern dargestellt wird. Dies ist der Fall: k[...]:

  • Wir können zuerst eine Zahl analysieren, dann die linke Klammer analysieren, den folgenden Inhalt rekursiv analysieren und zurückkehren, wenn wir auf die entsprechende rechte Klammer stoßen. Zu diesem Zeitpunkt können wir die Zahl x basierend auf der analysierten Zahl analysieren Die Zeichenfolge s' in den Klammern erstellt eine neue Zeichenfolge. Die aktuelle Position ist eine Buchstabenposition, daher analysieren wir direkt den aktuellen Buchstaben und analysieren dann den Inhalt nach diesem Buchstaben rekursiv nach unten.

  • class Solution {
        int ptr;
        public String decodeString(String s) {
            LinkedList<String> stk = new LinkedList<String>();
            ptr = 0;
            while (ptr < s.length()) {
                char cur = s.charAt(ptr);
                if (Character.isDigit(cur)) {
                    // 获取一个数字并进栈
                    String digits = getDigits(s);
                    stk.addLast(digits);
                } else if (Character.isLetter(cur) || cur == &#39;[&#39;) {
                    // 获取一个字母并进栈
                    stk.addLast(String.valueOf(s.charAt(ptr++))); 
                } else {
                    ++ptr;
                    LinkedList<String> sub = new LinkedList<String>();
                    while (!"[".equals(stk.peekLast())) {
                        sub.addLast(stk.removeLast());
                    }
                    Collections.reverse(sub);
                    // 左括号出栈
                    stk.removeLast();
                    // 此时栈顶为当前 sub 对应的字符串应该出现的次数
                    int repTime = Integer.parseInt(stk.removeLast());
                    StringBuffer t = new StringBuffer();
                    String o = getString(sub);
                    // 构造字符串
                    while (repTime-- > 0) {
                        t.append(o);
                    }
                    // 将构造好的字符串入栈
                    stk.addLast(t.toString());
                }
            }
            return getString(stk);
        }
        public String getDigits(String s) {
            StringBuffer ret = new StringBuffer();
            while (Character.isDigit(s.charAt(ptr))) {
                ret.append(s.charAt(ptr++));
            }
            return ret.toString();
        }
        public String getString(LinkedList<String> v) {
            StringBuffer ret = new StringBuffer();
            for (String s : v) {
                ret.append(s);
            }
            return ret.toString();
        }
    }
    Nach dem Login kopieren

    Zeitkomplexität: O(N)

  • Raumkomplexität: O(N)

Das obige ist der detaillierte Inhalt vonWie verwende ich den Go Java-Algorithmus zur String-Dekodierung?. 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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
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)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

See all articles