我有以下两个字符串:
var str1 = "hello";
var str2 = "ehlol";
如何检查两个字符串是否包含相同的字符?
答案 0 :(得分:38)
可能不是最优,但你可以做到
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
答案 1 :(得分:4)
推荐的方法之一是使用哈希表:计算每个字符出现的次数。请注意,如果您的字符为ASCII
,则效果最佳。
此算法的复杂性为O(M+N+sigma)
,其中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
答案 2 :(得分:3)
您可以为此目的使用函数,例如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;
}
&#13;
<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>
&#13;
答案 3 :(得分:1)
这是Gurvinders answer的修改版本。
let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil)
let destVC = storyboard.instantiateViewControllerWithIdentifier("PersonalInformationId") as! PersonalInformation
var arrayToSegue: [String] = self.userInformation
destVC = arrayToSegue
// present or push, as you wish
presentViewController(destVC, animated: true, completion: nil)
答案 4 :(得分:0)
你可以这样说:
(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 })
答案 5 :(得分:0)
您可以使用简单的foreach循环进行检查。迭代循环(String数组)并检查第一个String数组中第二个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");
}
&#13;