algorithm
Überprüfen Sie, ob zwei Zeichenfolgen Anagramme sind
Suche…
Einführung
Zwei Zeichenfolgen mit demselben Zeichensatz werden Anagramm genannt. Ich habe hier Javascript verwendet.
Wir erstellen einen Hash von str1 und erhöhen die Anzahl um +1. Wir werden die zweite Zeichenkette durchlaufen und überprüfen, ob alle Zeichen in Hash sind und den Wert des Hash-Schlüssels verringern. Vergewissern Sie sich, dass der Wert des Hash-Schlüssels auf Null steht.
Beispielein- und -ausgabe
Ex1: -
let str1 = 'stackoverflow';
let str2 = 'flowerovstack';
Diese Zeichenfolgen sind Anagramme.
// Erzeuge Hash aus str1 und erhöhe eine Anzahl.
hashMap = {
s : 1,
t : 1,
a : 1,
c : 1,
k : 1,
o : 2,
v : 1,
e : 1,
r : 1,
f : 1,
l : 1,
w : 1
}
Sie können sehen, dass hashKey 'o' den Wert 2 enthält, da o in Zeichenfolge 2 mal ist.
Schleifen Sie nun über str2 und prüfen Sie, ob jedes Zeichen in hashMap vorhanden ist. Wenn ja, verringern Sie den Wert des hashMap-Schlüssels.
hashMap = {
s : 0,
t : 0,
a : 0,
c : 0,
k : 0,
o : 0,
v : 0,
e : 0,
r : 0,
f : 0,
l : 0,
w : 0
}
Schleifen Sie über das hashMap-Objekt und überprüfen Sie, ob alle Werte im Schlüssel von hashMap Null sind.
In unserem Fall sind alle Werte Null, daher ein Anagramm.
Generischer Code für Anagramme
(function(){
var hashMap = {};
function isAnagram (str1, str2) {
if(str1.length !== str2.length){
return false;
}
// Create hash map of str1 character and increase value one (+1).
createStr1HashMap(str1);
// Check str2 character are key in hash map and decrease value by one(-1);
var valueExist = createStr2HashMap(str2);
// Check all value of hashMap keys are zero, so it will be anagram.
return isStringsAnagram(valueExist);
}
function createStr1HashMap (str1) {
[].map.call(str1, function(value, index, array){
hashMap[value] = value in hashMap ? (hashMap[value] + 1) : 1;
return value;
});
}
function createStr2HashMap (str2) {
var valueExist = [].every.call(str2, function(value, index, array){
if(value in hashMap) {
hashMap[value] = hashMap[value] - 1;
}
return value in hashMap;
});
return valueExist;
}
function isStringsAnagram (valueExist) {
if(!valueExist) {
return valueExist;
} else {
var isAnagram;
for(var i in hashMap) {
if(hashMap[i] !== 0) {
isAnagram = false;
break;
} else {
isAnagram = true;
}
}
return isAnagram;
}
}
isAnagram('stackoverflow', 'flowerovstack'); // true
isAnagram('stackoverflow', 'flowervvstack'); // false
})();
Zeitkomplexität: - 3n dh O (n).