दो स्ट्रिंग्स 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