网站英文版是怎么做的,如何用ps做创意视频网站,sem推广案例,中国国家培训网官网查询如果交换字符串 X 中的两个不同位置的字母#xff0c;使得它和字符串 Y 相等#xff0c;那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的#xff0c;那它们也是相似的。
例如#xff0c;“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置)#xff1b; “r…如果交换字符串 X 中的两个不同位置的字母使得它和字符串 Y 相等那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的那它们也是相似的。
例如“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置) “rats” 和 “arts” 也是相似的但是 “star” 不与 “tars”“rats”或 “arts” 相似。
总之它们通过相似性形成了两个关联组{“tars”, “rats”, “arts”} 和 {“star”}。注意“tars” 和 “arts” 是在同一组中即使它们并不相似。形式上对每个组而言要确定一个单词在组中只需要这个词和该组中至少一个单词相似。
给你一个字符串列表 strs。列表中的每个字符串都是 strs 中其它所有字符串的一个字母异位词。请问 strs 中有多少个相似字符串组
示例 1
输入strs [“tars”,“rats”,“arts”,“star”] 输出2
代码
class Solution {int[] fa;public void init(){for(int i0;ifa.length;i)fa[i]i;}public int find(int x){if(x!fa[x])fa[x]find(fa[x]);return fa[x];}public void union(int x,int y){xfind(x);yfind(y);if(xy) return;fa[x]y;}public int numSimilarGroups(String[] strs) {int nstrs.length,cn;fanew int[n];init();for(int i0;in;i)//遍历所有字符串的两两组合for(int ji1;jn;j){if(find(i)find(j)) continue;if(checkNumSimilarGroups(strs[i],strs[j])){union(i,j); c--;//统计连通分量}}return c;}public boolean checkNumSimilarGroups(String l,String r) {//判断是否相似int nl.length(),cnt0;for(int i0;in;i)if(l.charAt(i)!r.charAt(i)) cnt;return cnt2||cnt0;}
}