は、私は、次の2つの文字列を持っている:シャッフルされた2つの文字列を比較するにはどうすればよいですか?
var str1 = "hello";
var str2 = "ehlol";
は、どのように私は両方の文字列が同じ文字を含めるかどうかを確認することができますか?
は、私は、次の2つの文字列を持っている:シャッフルされた2つの文字列を比較するにはどうすればよいですか?
var str1 = "hello";
var str2 = "ehlol";
は、どのように私は両方の文字列が同じ文字を含めるかどうかを確認することができますか?
非常に最適ではないかもしれませんが、あなたは、単に1件のコメント内の別の提案のアプローチ(ケース、文字列の長さの最適化のためにはかなり大きいです)
str1.split("").sort().join() == str2.split("").sort().join(); //outputs true
を行うことができます
を使用できstr1.length===str2.length && str1.split("").sort().join() == str2.split("").sort().join(); //first check the length to quickly rule out in case of obvious non-matches
@ gurvinder372は、同じ文字が個別にカウンターになるのでしょうか? – guradio
@guradioそれらは個別に数えられるでしょう – gurvinder372
最初に長さをチェックすることによってそれを最適化することができます: 'str1.length === str2.length && str1.split(" ")。sort()。join()== str2.split ").sort()。join()';長いですが、簡単なケースでリソースを節約します – Martijn
sameChars
ここのようなこの目的のための関数 -
function myFunction()
{
var input_1 = document.getElementById('input_1').value;
var input_2 = document.getElementById('input_2').value;
var result = sameChars(input_1,input_2);
document.getElementById("demo").innerHTML = result;
}
function sameChars(firstStr, secondStr)
{
var first = firstStr.split('').sort().join('');
var second = secondStr.split('').sort().join('');
return first.localeCompare(second)==0;
}
<input type="text" maxlength="512" id="input_1"/>
<input type="text" maxlength="512" id="input_2"/>
<button onclick="myFunction()">Check If Shuffled</button>
<p id="demo"></p>
タグはJavaScriptであり、Javaではありません:) – gurvinder372
申し訳ありません、それを変換する瞬間を与えてください:( –
これはまだJavaです:)あなたのブラウザのコンソールで試してみて – gurvinder372
推奨する方法の1つは、ハッシュテーブルを使用することです。各文字が何回表示されるかをカウントします。文字がASCII
の場合、これが最も効果的です。
このアルゴリズムの複雑さはM
、N
は、文字列の長さであり、sigma
は異なる文字の数であるO(M+N+sigma)
あります。受け入れられる解の複雑さはソートのために高くなります。ソートは通常O(N*logN)
で行われますが、文字列が短い場合は依然として良好です。あなたの弦に数十万の文字があるなら、これは行く方法です。 hash tables
を使用することの欠点は、並べ替えを使用するソリューションよりもmemory
の使用率が高いことです。
function sameLetters(str1, str2){
var hash = {};
var len1 = str1.length;
var len2 = str2.length;
// Strings with different lengths can't contain the same letters
if(len1 !== len2) return false;
// Count how many times each character appears in str1
for(var i = 0; i < len1; ++i) {
var c = str1[i];
if(typeof hash[c] !== 'undefined') hash[c]++;
else hash[c] = 1;
}
// Make sure each character appearing in str2 was found in str1
for(var i = 0; i < len2; ++i) {
var c = str2[i];
if(typeof hash[c] === 'undefined') return false;
if(hash[c] === 0) return false;
hash[c]--;
}
// Make sure no letters are left
for(var c in hash) {
if(hash[c]) return false;
}
return true;
}
あなたはその後、(ブラウザのコンソールにそれで遊ぶ)このような関数を呼び出すことができます。
sameLetters("hello", "ehlol"); // true
sameLetters("hello", "ehllol"); // false
はここGurvinders answerの修正版です。
var str1 = "hello",
str2 = "ehlol";
// Add sort on prototype of String object
String.prototype.sort = function() {
return this.split('').sort().join('');
};
// First check if length of both is same
var same = str1.length === str2.length && str1.sort() === str2.sort();
console.log('Strings are same?', same);
あなたはおそらくこれを言うことができます:
(a.length === b.length) && (a.split('').every(function(val) { return b.indexOf(val) > -1}))
そして、ES6であなたは次のようにそれが見えるようにすることができます:
(a.length === b.length) && a.split('').every(val => { return b.indexOf(val) > -1 })
あなたは、単純なforeachのループを使用することにより確認することができます。ループ(Stringの配列)を繰り返し、最初のStringの配列内の2番目のStringの各要素をチェックします。
var str1 = "hello";
var str2 = "ehlol";
var array1 = str1 .split("") ;
var array2= str2 .split("");
var isMatched = true;
if(array1.length == array2.length){
array2.forEach(function(elem , i){
if(array1.indexOf(elem) <0){
isMatched = false;
return false;
}
})
}
if(!isMatched){
console.log("Not Matched");
}else{
console.log("Matched");
}
は、「こんにちは」と「EHLO」の両方が同じ4つの文字から構成されていることを考えると、試合としてカウントしませんか? – nnnnnn
「同じアルファベットを共有する」があいまいであることを明確にしていないか、明確に指定していないかを明確にしないでください –
パフォーマンスが問題の場合は、 – Cristy