尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
839. 相似字符串组(union findbfs)
链接839. 相似字符串组题解class Solution { public: int numSimilarGroups(vectorstring strs) { std::unordered_mapint, std::vectorint graph; for (int i 0; i strs.size(); i) { for (int j 0; j strs.size(); j) { if (is_similar(strs[i], strs[j])) { graph[i].push_back(j); } } } std::vectorbool visited(strs.size(), false); int result 0; for (int i 0; i strs.size(); i) { if (visited[i]) { continue; } bfs(graph, i, visited); result; } return result; } private: bool is_similar(const std::string str1, const std::string str2) { int cnt 0; for (int i 0; i str1.size(); i) { if (str1[i] ! str2[i]) { cnt; } } return cnt 2; } void bfs(std::unordered_mapint, std::vectorint graph, int begin, std::vectorbool visited) { std::queueint que; que.push(begin); visited[begin] true; while (!que.empty()) { auto f que.front(); que.pop(); for (auto neighboard : graph[f]) { if (visited[neighboard]) { continue; } visited[neighboard] true; que.push(neighboard); } } } };class Solution { public: vectorint _rank; vectorint _id; int find(int p) { while(_id[p] ! p) { _id[p] _id[_id[p]]; p _id[p]; } return p; } void union_find(int p, int q) { int root_p find(p); int root_q find(q); if(root_p root_q) { return; } if(_rank[root_p] _rank[root_q]) { _id[root_p] root_q; } else if(_rank[root_q] _rank[root_p]) { _id[root_q] root_p; } else { _id[root_p] root_q; _rank[root_q] 1; } } bool is_connected(int p, int q) { return find(p) find(q); } int get_size() { int cnt 0; for(int i 0; i _id.size(); i) { if(_id[i] i) { cnt; } } return cnt; } bool check(const std::string s1, const std::string s2) { int cnt 0; for(int i 0; i s1.size(); i) { if(s1[i] ! s2[i]) { cnt; } if(cnt 2) { return false; } } return true; } int numSimilarGroups(vectorstring strs) { if(strs.size() 0) { return 0; } _rank.resize(strs.size(), 1); _id.resize(strs.size()); // 每个字符串自己为一个节点 for(int i 0; i strs.size(); i) { _id[i] i; } //判断一个字符串是否与其他的字符串满足一个组的条件 for(int i 0; i strs.size(); i) { for(int j i1; j strs.size(); j) { // 如果已经在一个组了 if(is_connected(i, j)) { continue; } // 检测是否满足规则 if(check(strs[i], strs[j])) { union_find(i, j); } } } return get_size(); } };
RELATED

相关推荐

SpringBoot实现简单邮件发送(代码+注释)

SpringBoot实现简单邮件发送(代码+注释)

1.让自己的邮箱变成客户端(以网易云邮箱为例&#xff0c;qq邮箱也一样的操作) 1.开启服务2.它会给你一串乱码做授权码 2.添加依赖<!-- mail 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-sta…

📅 2026/8/31 2:47:37
HiFi-BRep:从AI生成脆性到可编辑CAD模型的高保真边界表示生成框架

HiFi-BRep:从AI生成脆性到可编辑CAD模型的高保真边界表示生成框架

如果你是一名CAD设计师或三维建模工程师&#xff0c;最近是否遇到过这样的困扰&#xff1a;你尝试用AI生成一个机械零件的三维模型&#xff0c;模型看起来轮廓不错&#xff0c;但当你试图将其导入CAD软件进行后续的工程修改、装配或仿真分析时&#xff0c;却发现模型“一碰就碎…

📅 2026/8/31 11:41:53
Qt样式表深度解析:QComboBox自定义样式实战指南

Qt样式表深度解析:QComboBox自定义样式实战指南

1. 项目概述&#xff1a;为什么QComboBox的样式表值得深究&#xff1f;在桌面应用开发中&#xff0c;界面是用户感知产品的第一道门面。一个精致、协调且符合操作习惯的界面&#xff0c;能极大提升软件的质感和用户体验。而Qt&#xff0c;作为一款久经考验的跨平台C框架&#x…

📅 2026/8/31 22:06:29
MORE NEWS

更多资讯

📰

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

基于Django的运维平台实战:资产、发布、巡检、告警一体化

简介&#xff1a;这份资源是一套基于Django框架开发的运维平台源码&#xff0c;面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员&#xff0c;可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模块的落…

📰

GD32E10x官方例程入门:从GPIO点灯到串口调试

简介&#xff1a;这份GD32E10x系列官方例程面向嵌入式硬件与单片机开发者&#xff0c;基于ARM Cortex-M3内核&#xff0c;汇集兆易创新GD32E10x的示例代码&#xff0c;适合工业控制、消费电子、通信设备等场景的学习、验证与二次开发。压缩包共935个文件&#xff0c;约11.16MB&…

📰

基于ADS122U04IPWR与STM32F427ZI的工业测温方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬