如果我们可以交换str1的两个字母(在不同位置),则两个字符串str1和str2是相似的,因此它等于str2。另外,两个字符串str1和str2如果相等,则类似。
例如,“ tars”和“ rats”相似(在位置0和2处交换),“ rats”和“ arts”相似,但是“ star”与“ tars”,“ rats”或“艺术”。
它们一起通过相似性形成两个相连的组:{“ 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