在这个 javascript 字谜问题中,我一直在变得虚假而不是真实
Posted
技术标签:
【中文标题】在这个 javascript 字谜问题中,我一直在变得虚假而不是真实【英文标题】:I keep getting false and not true in this javascript anagram problem 【发布时间】:2020-12-06 23:07:26 【问题描述】:您好,我正在使用 javascript 来解决一个字谜问题。我在比较放入函数的 2 个字符串中创建的 2 个对象时遇到问题。
如果 2 个字符串具有相同的字母出现相同的次数,则该函数应返回 true。无论字符串中的顺序如何。您也忽略了字母的大小写,为此我将所有字符串都设为小写。这是我的代码:
//example:
//validAnagram('', '') //true
//validAnagram('aaz', 'zza') //false
const validAnagram = (str1, str2) =>
str1 = str1.toLowerCase()
str2 = str2.toLowerCase()
const frequency1 =
const frequency2 =
//if lengths of string isnt the same automatically make it false
if(str1.length !== str2.length)
return false
//putting letters of the strings with their frequencies in the objects
for(let letter of str1)
if(!frequency1[letter])
frequency1[letter] = 1
else
frequency1[letter]++
for(let letter of str2)
if(!frequency2[letter])
frequency2[letter] = 1
else
frequency2[letter]++
for(let char in frequency1)
if(!(frequency2[char]))
return false
else if(frequency2[char] !== frequency1[char])
console.log(char)
return false
else
return true
【问题讨论】:
您不应该在循环内返回 true。为什么frequency2
被注释掉了?
您需要将最后一个for
循环中的return true
置于循环之外。您必须确保 所有 字符的循环条件为真。
这是使用调试器或学习如何使用调试器(如果您还不知道)的主要案例。
const validAnagram = (str1, str2) => str1.toLowerCase().split('').sort().join('') === str2.toLowerCase().split('').sort().join('');
你为什么认为 aaz
和 zza
首先是字谜?
【参考方案1】:
首先:我从 2 个字符串中搜索了所有唯一字符,然后保存在数组中
第二:我concat 2个数组,然后使用set,删除所有重复项(字符)
第三:我循环遍历每个字符并找到该项目的出现 第四:如果匹配或不匹配,或者如果字符实际上不存在于任何字符串中,可以在控制台中找到。
const string1 = 'dafdsef dgrg tdyhjTdh drdd@ dgrgrth-grth'
const string2 = '@dafdsef dgrg tdyhjtdh drdd dgrgr;thgrth'
console.log("strings matched : "+test_string(string1 , string2));
function test_string(string1 , string2)
jointArray = [...unique_char(string1.toLowerCase()), ...unique_char(string2.toLowerCase())]
neewarray = [...new Set([...jointArray])]
ok = true;
neewarray.forEach( v=>
var re = new RegExp(v, 'g');
if(string1.match(re) && string2.match(re) )
if( string1.match(re).length == string2.match(re).length )
console.log(` $v => matched in 2 strings`)
else
ok = false;
console.log(` $v => not matched in 2 strings`)
else if(string1.match(re))
ok = false;
console.log(` $v => not avialable in a string1 `)
else if(string2.match(re))
ok = false;
console.log(` $v => not avialable in a string2 `)
)
return ok;
function unique_char(str1)
var str=str1;
var uniq_array=[];
for (var x=0;x < str.length;x++)
if(uniq_array.indexOf(str.charAt(x))==-1)
uniq_array.push(str[x]);
return uniq_array;
【讨论】:
以上是关于在这个 javascript 字谜问题中,我一直在变得虚假而不是真实的主要内容,如果未能解决你的问题,请参考以下文章
在 Javascript 中使用 Map 从一组字谜中查找唯一单词