Heim Web-Frontend Front-End-Fragen und Antworten So finden Sie sich nicht wiederholende Teilzeichenfolgen in JavaScript

So finden Sie sich nicht wiederholende Teilzeichenfolgen in JavaScript

Apr 23, 2023 pm 07:30 PM

In der tatsächlichen Entwicklung müssen wir häufig einige Operationen und Verarbeitungen an Zeichenfolgen durchführen, darunter das Finden sich nicht wiederholender Teilzeichenfolgen. Beispielsweise ist in der Zeichenfolge „abcabcbb“ die längste sich nicht wiederholende Teilzeichenfolge „abc“ und in der Zeichenfolge „bbbbbb“ ist die längste sich nicht wiederholende Teilzeichenfolge „b“. Diese Probleme sind in Algorithmen als das Problem des „längsten sich nicht wiederholenden Teilstrings“ bekannt und wir können sie mit JavaScript lösen.

1. Gewalttätige Aufzählungsmethode

Die einfachste Methode besteht darin, die Brute-Force-Aufzählungsmethode zu verwenden, d. Notieren Sie dann die Länge der Teilzeichenfolge zu diesem Zeitpunkt, setzen Sie die Teilzeichenfolge zurück und durchlaufen Sie die Zeichenfolge weiter nach unten, bis das Ende der Durchquerung erreicht ist.

Der Code lautet wie folgt:

function longestSubstring(str) {
  let maxLength = 0; // 定义最大长度为 0
  for(let i = 0; i < str.length; i++) {
    let map = new Map(); // 定义 Map 来保存子串中元素出现的次数
    let length = 0; // 定义子串长度为 0
    for(let j = i; j < str.length; j++) {
      if(map.has(str[j])) { // 如果子串中已经有这个元素了
        maxLength = Math.max(maxLength, length); // 更新最大长度
        break; // 说明这个子串已经不符合要求了,跳出内部循环
      } else {
        map.set(str[j], 1); // 在 Map 中记录该元素的出现次数
        length++; // 子串长度 +1
        maxLength = Math.max(maxLength, length); // 更新最大长度
      }
    }
  }
  return maxLength;
}
Nach dem Login kopieren

Die zeitliche Komplexität dieser Methode beträgt O(n^3). Da die Anzahl der verschachtelten Schleifen sehr groß ist, ist ihre Effizienz bei der Verarbeitung längerer Zeichenfolgen sehr ineffizient.

2. Schiebefenstermethode

Um die Effizienz zu verbessern, können wir die Schiebefenstermethode verwenden. Die Idee des Schiebefensters besteht darin, ein Fenster der Länge k beizubehalten und dieses Fenster zu verschieben, um Zeichenfolgen zu verarbeiten. Bei diesem Problem entspricht die Länge des Schiebefensters der Länge der sich nicht wiederholenden Zeichenfolge.

Konkret definieren wir beim Durchlaufen einer Zeichenfolge einen Startzeiger und einen Endzeiger, und diese beiden Zeiger bilden ein Fenster. Wenn in jeder Schleife das Element, auf das der Endzeiger zeigt, nicht im Fenster vorhanden ist, können wir es dem Fenster hinzufügen, dann das Fenster erweitern und die Länge des Fensters aktualisieren. Wenn das Element, auf das der Endzeiger zeigt, bereits im Fenster vorhanden ist, müssen wir den Startzeiger nach rechts verschieben und das Fenster verkleinern, bis das Element, auf das der Endzeiger zeigt, nicht mehr im Fenster vorhanden ist. In diesem Prozess müssen wir eine Zuordnungstabelle verwenden, um die Anzahl der Vorkommen jedes Elements im Fenster aufzuzeichnen.

Der Code lautet wie folgt:

function longestSubstring(str) {
  let maxLength = 0; // 定义最大长度为 0
  let map = new Map(); // 定义 Map 来保存元素出现的次数
  let left = 0; // 定义左指针为 0
  for(let right = 0; right < str.length; right++) {
    if(map.has(str[right])) { // 如果窗口内已经有该元素了
      left = Math.max(left, map.get(str[right]) + 1); // 更新左指针,向右移动
    }
    map.set(str[right], right); // 在 Map 中记录该元素的位置
    maxLength = Math.max(maxLength, right - left + 1); // 更新最大长度
  }
  return maxLength;
}
Nach dem Login kopieren

Die zeitliche Komplexität der Schiebefenstermethode beträgt O(n). Sie verwendet HashMap, um Zeichen schnell zu finden und zu speichern, was schneller und effizienter ist als die Brute-Force-Aufzählungsmethode.

3. Zusammenfassung

Für das Problem mit der längsten sich nicht wiederholenden Teilzeichenfolge in einer Zeichenfolge können wir zwei Methoden verwenden, um es zu lösen: die Brute-Force-Aufzählungsmethode und die Schiebefenstermethode. Die Brute-Force-Aufzählungsmethode weist eine hohe zeitliche Komplexität auf, während die Sliding-Window-Methode effizienter ist. In der tatsächlichen Entwicklung können wir je nach Bedarf die geeignete Methode zur Lösung des Problems auswählen.

Das obige ist der detaillierte Inhalt vonSo finden Sie sich nicht wiederholende Teilzeichenfolgen in JavaScript. 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ß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)

Was ist Useffizität? Wie verwenden Sie es, um Nebenwirkungen auszuführen? Was ist Useffizität? Wie verwenden Sie es, um Nebenwirkungen auszuführen? Mar 19, 2025 pm 03:58 PM

In dem Artikel wird die Verwendung von UseEffect in React, einen Haken für die Verwaltung von Nebenwirkungen wie Datenabrufen und DOM -Manipulation in funktionellen Komponenten erläutert. Es erklärt die Verwendung, gemeinsame Nebenwirkungen und Reinigung, um Probleme wie Speicherlecks zu verhindern.

Was ist usecontext? Wie verwenden Sie es, um den Zustand zwischen Komponenten zu teilen? Was ist usecontext? Wie verwenden Sie es, um den Zustand zwischen Komponenten zu teilen? Mar 19, 2025 pm 03:59 PM

Der Artikel erläutert den Usecontext in React, was das staatliche Management durch Vermeidung von Prop -Bohrungen vereinfacht. Es wird von Vorteilen wie zentraler Staat und Leistungsverbesserungen durch reduzierte Neulehre erörtert.

Wie verbinden Sie React -Komponenten mit Connect () an den Redux -Store? Wie verbinden Sie React -Komponenten mit Connect () an den Redux -Store? Mar 21, 2025 pm 06:23 PM

In Artikel werden die Verbindungskomponenten an Redux Store mit Connect () verbinden, wobei MapStatetoprops, MapDispatchtoprops und Leistungsauswirkungen erläutert werden.

Wie verhindern Sie das Standardverhalten bei Ereignishandlern? Wie verhindern Sie das Standardverhalten bei Ereignishandlern? Mar 19, 2025 pm 04:10 PM

In Artikeln werden das Standardverhalten bei Ereignishandlern mithilfe von PURDDEFAULT () -Methoden, seinen Vorteilen wie verbesserten Benutzererfahrungen und potenziellen Problemen wie Barrierefreiheitsproblemen verhindern.

Was sind die Vor- und Nachteile kontrollierter und unkontrollierter Komponenten? Was sind die Vor- und Nachteile kontrollierter und unkontrollierter Komponenten? Mar 19, 2025 pm 04:16 PM

Der Artikel erörtert die Vor- und Nachteile kontrollierter und unkontrollierter Komponenten bei React, wobei sich auf Aspekte wie Vorhersehbarkeit, Leistung und Anwendungsfälle konzentriert. Es rät zu Faktoren, die bei der Auswahl zwischen ihnen berücksichtigt werden müssen.

Reacts Rolle bei HTML: Verbesserung der Benutzererfahrung Reacts Rolle bei HTML: Verbesserung der Benutzererfahrung Apr 09, 2025 am 12:11 AM

React kombiniert JSX und HTML, um die Benutzererfahrung zu verbessern. 1) JSX bettet HTML ein, um die Entwicklung intuitiver zu gestalten. 2) Der virtuelle DOM -Mechanismus optimiert die Leistung und reduziert den DOM -Betrieb. 3) Komponentenbasierte Verwaltungs-Benutzeroberfläche zur Verbesserung der Wartbarkeit. 4) Staatsmanagement und Ereignisverarbeitung verbessern die Interaktivität.

Was sind die Einschränkungen des Reaktivitätssystems von Vue 2 in Bezug auf Array- und Objektänderungen? Was sind die Einschränkungen des Reaktivitätssystems von Vue 2 in Bezug auf Array- und Objektänderungen? Mar 25, 2025 pm 02:07 PM

Das Reaktivitätssystem von VUE 2 kämpft mit der Einstellung der Direktarray -Index, der Längenänderung und der Addition/Löschung der Objekteigenschaften. Entwickler können die Mutationsmethoden von VUE und VUE.SET () verwenden, um die Reaktivität sicherzustellen.

Wie definieren Sie Routen mit der & lt; Route & gt; Komponente? Wie definieren Sie Routen mit der & lt; Route & gt; Komponente? Mar 21, 2025 am 11:47 AM

In dem Artikel wird das Definieren von Routen im React -Router unter Verwendung der & lt; Route & gt; Komponente, Abdeckung von Requisiten wie Pfad, Komponente, Rendern, Kindern, exakt und verschachteltes Routing.

See all articles