优化确定是否可以重新排列字符串的子集以形成另一个字符串

完成scramble(str1, str2)如果部分str1字符可以重新排列匹配则返回真的函数str2,否则返回假。

笔记:

  • 将仅使用小写字母 (az)。将不包含标点符号或数字。
  • 性能需要考虑
  • 输入字符串s1s2空终止。

例子

'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
}

回答

如果字符串如此之大以至于运行时确实是一个问题,您可以先将其中一个字符串组合到一个对象中,这样整体复杂性就O(n)不是O(n ^ 2)

function scramble(str1, str2) {
  const grouped = {};
  for (const char of str1) {
    grouped[char] = (grouped[char] || 0) + 1;
  }
  for (const char of str2) {
    if (!grouped[char]) return false;
    grouped[char]--;
  }
  return true;
}

console.log(scramble('rkqodlw', 'world'));
console.log(scramble('katas', 'steak'));


以上是优化确定是否可以重新排列字符串的子集以形成另一个字符串的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>