JavaScript 中相似的字符串组
如果我们可以交换 str1 的两个字母(在不同的位置)以使其等于 str2,则这两个字符串 str1 和 str2 是相似的。此外,如果两个字符串 str1 和 str2 相等,也是相似的。
例如,“tars”和“rats”是相似的(在位置 0 和 2 处交换),并且“rats”和“arts”是相似的,但“star”与“tars”、“rats”或“arts”不相等。
总之,这些形式通过相似性形成两个相连的组:{"tars", "rats", "arts"} 和 {"star"}。请注意,“tars”和“arts”属于同一组,即使它们不相等。
根据定义,每个组都是这样的:当且仅当一个单词与组中的至少一个其他单词相似时,该单词才在该组中。
给定一个字符串列表 arr,其中 arr 中的每个字符串都是 arr 中每个其他字符串的异位词。我们需要编写一个函数来找出有多少个组。
范例
以下是代码 −
const arr = ["tars","rats","arts","star"];
const isSimilar = (str1, str2) => {
const obj = {}
let counter = 0
for(let i=0; i< str1.length; i++){
if(str1[i] !== str2[i]) { counter++ }
obj[str1[i]] = str2[i]
}
return counter === 2? true : false
}
const similarStringGroup = (arr = []) => {
const group = [[arr[0]]]
for(let i=1; i<arr.length; i++){
let match = false
for(let j=0; j<group.length; j++){
for(let k=0; k< group[j].length; k++){
const booleanMatch = isSimilar(group[j][k], arr[i])
if(booleanMatch) {
group[j].push(arr[i]);
match = true
break;
}
}
if(match === true) { break }
}
if(match === false){ group.push([arr[i]]) }
}
return group.length
}
console.log(similarStringGroup(arr));输出
以下是控制台输出 −
2
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP