Überprüfen Sie, ob eine Zeichenfolge alle Zeichen einer anderen Zeichenfolge in Ruby enthält

8

Nehmen wir an, ich habe eine Zeichenfolge wie string= "aasmflathesorcerersnstonedksaottersapldrrysaahf" . Wenn Sie es nicht bemerkt haben, finden Sie dort den Ausdruck "harry potter and the sorcerers stone" (minus Leerzeichen).

Ich muss überprüfen, ob string alle Elemente der Zeichenfolge enthält.

%Vor%

Einschließen funktioniert nicht mit einer gemischten Zeichenfolge.

Wie kann ich überprüfen, ob eine Zeichenfolge alle Elemente einer anderen Zeichenfolge enthält?

    
Iggy 29.08.2016, 18:28
quelle

4 Antworten

11

Sets und Array-Schnittpunkt berücksichtigen nicht wiederholte Zeichen, sondern einen Histogramm / Frequenzzähler tut:

%Vor%

Schreiben Sie Ihre eigene Array#frequency , wenn Sie die Facettenabhängigkeit nicht möchten.

%Vor%     
tokland 29.08.2016, 18:36
quelle
5

Ich nehme an, dass, wenn die zu überprüfende Zeichenfolge "Zauberer" ist, string beispielsweise drei "r" enthalten muss. Wenn ja, könntest du die Methode Array # Unterschied verwenden, die ich dem Ruby-Kern hinzugefügt habe.

%Vor%

Wenn die Zeichen des Ziels nicht nur in str sein müssen, sondern in der gleichen Reihenfolge, könnten wir schreiben:

%Vor%

(oder !!(str =~ r) #=> true )

%Vor%     
Cary Swoveland 29.08.2016 18:39
quelle
2

Eine andere, wenn auch nicht unbedingt bessere Lösung, die sortierte Zeichenfelder und Teilzeichenfolgen verwendet:

Deine zwei Saiten gegeben ...

%Vor%

Sie können Ihre Betreff-Zeichenfolge mit .chars.sort.join ...

sortieren %Vor%

Und dann eine Liste der zu suchenden Teilstrings erzeugen:

%Vor%

Sie könnten alternativ den gleichen Satz von Teilstrings mit erzeugen Methode

%Vor%

Und dann einfach überprüfen, ob jeder Such-Sub-String innerhalb der sortierten Betreff-String erscheint:

%Vor%     
meagar 29.08.2016 19:19
quelle
-1
  1. Erstellen Sie ein zweidimensionales Array aus Ihrer string -Bank, um jedem Buchstaben die Anzahl der Buchstaben zuzuordnen.

  2. Erstellen Sie ein zweidimensionales Array aus der Harry Potter-Zeichenfolge auf die gleiche Weise.

  3. Durchlaufen Sie beide und führen Sie Vergleiche durch.

Ich habe keine Erfahrung in Ruby, aber so würde ich anfangen, es in der Sprache zu lernen, die ich am meisten kenne, nämlich Java.

    
ITWorker 29.08.2016 18:35
quelle

Tags und Links