Javascript 优化确定是否可以重新排列字符串的子集以形成另一个字符串
完成函数Javascript 优化确定是否可以重新排列字符串的子集以形成另一个字符串,javascript,algorithm,Javascript,Algorithm,完成函数scramble(str1,str2),如果部分str1字符可以重新排列以匹配str2,则返回true,否则返回false 注: 仅使用小写字母(a-z)。不包括标点符号或数字 需要考虑性能 输入字符串s1和s2以null结尾 例子 'rkqodlw', 'world' ==> True 'katas', 'steak' ==> False 我的代码: function scramble(str1, str2) { let str = ''; for (i =
scramble(str1,str2)
,如果部分str1
字符可以重新排列以匹配str2
,则返回true,否则返回false
注:
- 仅使用小写字母(a-z)。不包括标点符号或数字
- 需要考虑性能
- 输入字符串
和s1
以null结尾s2
'rkqodlw', 'world' ==> True
'katas', 'steak' ==> False
我的代码:
function scramble(str1, str2) {
let str = '';
for (i = 0; i < str2.length; i++) {
if (str1.includes(str2[i])) {
str1 = str1.replace(str2[i], '')
str += str2[i]
}
if (str === str2) return true
}
return false
}
功能加扰(str1、str2){
设str='';
对于(i=0;i
如果字符串太大,以至于运行时确实存在问题,那么可以先将其中一个字符串分组到一个对象中,这样总体复杂度是O(n)
而不是O(n^2)
:
功能加扰(str1、str2){
const grouped={};
for(str1的常量字符){
分组[char]=(分组[char]| | 0)+1;
}
for(str2的常量字符){
如果(!grouped[char])返回false;
分组[char]-;
}
返回true;
}
log(扰码('rkqodlw','world');
console.log(加扰('katas','steak')代码>通过为每个单词制作一个频率计数器,可以在线性时间内完成此操作。如果,对于str2中的每个唯一字符,您发现其字母计数为[…s]。reduce((a,e)=>{
a[e]=++a[e]| | 1;
返回a;
}, {});
常数加扰=(a,b)=>{
常数aFreq=频率计数(a);
返回Object.entries(frequencyCount(b)).every([e,count])=>
计数