Zeitkomplexität: Im schlimmsten Fall iterieren wir über Min(str1,str2) und müssen str1 und str2 neu erstellen, sodass (str1.length str2.length) die Gesamtzeitkomplexität ergibt wird O(min(str1,str2) * (str1.length str2.length))
seinRaumkomplexität: O(1), da wir keinen zusätzlichen Raum benötigen.
","image":"http://www.luping.net/uploads/20241012/1728725766670a43065f5b5.jpg","datePublished":"2024-11-07T22:30:30+08:00","dateModified":"2024-11-07T22:30:30+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}Für zwei Zeichenfolgen s und t sagen wir „t teilt s“ genau dann, wenn s = t t t ... t t (d. h. t ist ein- oder mehrmals mit sich selbst verkettet).
Gegebene zwei Strings str1 und str2, gib den größten String x zurück, sodass x sowohl str1 als auch str2 teilt.
Obwohl der Leetcode es als leichtes Problem markierte, muss ich zugeben, dass es mir schwer fiel, sofort eine Lösung zu finden.
Lassen Sie mich die von Leetcode bereitgestellten Testfälle überprüfen und sie durchgehen, um meine Verwirrung zu erklären.
Eingabe: str1 = „ABCABC“, str2 = „ABC“
Ausgabe: „ABC“Eingabe: str1 = „ABABAB“, str2 = „ABAB“
Ausgabe: „AB“
Aus der Problemstellung und dem Testfall 1 habe ich festgestellt, dass wir die größte Zeichenfolge („ABC“) ausgeben müssen, indem wir beide Zeichenfolgen verketten. (Standardzeichenfolge „ABC“ === str2 und „ABC“ „ABC“ === str1).
Als ich mir jedoch Testfall 2 ansah, wurde mir schnell klar, dass ich nicht richtig verstanden hatte, dass ich „ABAB“ ausgeben sollte, da dies der längste String ist, mit dem ich beide Strings erstellen kann. Aber ich sprang zum Code und fing an, eine Lösung zu finden. (Anfängerfehler?)
Ich konnte nur eine Lösung finden, bei der:
Wie Sie sehen, ist meine Lösung für die Zeichenfolgen fehlgeschlagen, bei denen str1 str2, aber auch einige andere zusätzliche Zeichen enthält. Verstoß gegen die Anforderung, dass s = t t ... t t.
Ich musste mich an die Lösung von neetcode wenden, um Hilfe zu erhalten. Ich habe meine Probleme schnell verstanden:
Ich habe den GCD der Länge der Zeichenfolge gefunden, NICHT die Zeichenfolge selbst. Ich muss eine Zeichenfolge finden, in der ich durch Wiederholen dieser Zeichenfolgen beide Zeichenfolgen ohne verbleibende Zeichen erstellen kann.
Mir wurde klar, warum „ABAB“ nicht die Antwort für Testfall 2 sein kann:
wir müssen x so finden, dass es beide Strings gleichmäßig teilt. Wenn Sie also „ABAB“ als Zeichenfolge verwenden, können Sie str2 vollständig erstellen, aber für str1 erhalten Sie am Ende „ABABABAB“. Sie haben am Ende 2 überschüssige „AB“ und können nicht sagen, dass Sie str1 vollständig durch die Kombination von x erstellt haben.
"ABAB" Länge 4 und "ABABAB" Länge 6. Der GCD der beiden Strings = 2. Daher muss die Ausgabe ein String der Länge 2 sein.
Zeitkomplexität: Im schlimmsten Fall iterieren wir über Min(str1,str2) und müssen str1 und str2 neu erstellen, sodass (str1.length str2.length) die Gesamtzeitkomplexität ergibt wird O(min(str1,str2) * (str1.length str2.length))
seinRaumkomplexität: O(1), da wir keinen zusätzlichen Raum benötigen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3