当前位置: 首页 > news >正文

LeetCode:1408.数组中的字符串匹配

C++代码一:

class Solution {
public:vector<string> stringMatching(vector<string>& words) {unordered_set<string> result;int n = words.size();for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {// 跳过自身,且子串长度必须小于主串if (i == j || words[i].size() >= words[j].size()) {continue;}// 用find判断words[i]是否是words[j]的子串if (words[j].find(words[i]) != string::npos) {result.insert(words[i]);}}}return vector<string>(result.begin(), result.end());}
};

这个方法遍历所有字符串对,通过find函数判断其中较短的字符串是否是较长字符串的子串,收集所有满足条件的较短字符串,去重后返回。

C++代码二:

class Solution {
public:vector<string> stringMatching(vector<string>& words) {string tem="";for(string s:words){tem+=s;tem+=' ';               // 防止两个字符首位连接的部分刚好形成一个子串,用空格区分}vector<string> ans;for(string x:words){if(tem.find(x)!=tem.rfind(x)){   //从前后两个方向查找,如果pos不同则代表出现两次以上,必是子串。ans.push_back(x);}}return ans;}
};

这个代码的做法非常巧妙,核心是通过拼接所有字符串并利用前后查找位置的差异来判断一个字符串是否是其他字符串的子串。

将所有字符串拼接成一个大字符串,通过判断某个字符串在拼接后的字符串中是否出现至少两次,来确定它是否是其他字符串的子串。因为自身会出现一次,若额外出现一次则必是其他字符串的子串。

http://www.lryc.cn/news/612303.html

相关文章:

  • 面向流程和产品的安全档案论证方法
  • PostgreSQL 高可用与负载均衡
  • DDoS 防护的未来趋势:AI 如何重塑安全行业?
  • MySQL各版本差异对比小工具
  • 贪心算法学习 跳跃游戏
  • CDP集群中通过Hive外部表迁移HBase数据的操作记录
  • mysql 8递归查询
  • Java基础学习(三):输入输出、控制流程、大数值、数组
  • 客流特征识别准确率提升 29%:陌讯多模态融合算法在零售场景的实战解析
  • 数据结构与算法的认识
  • Android 之 ViewBinding 实现更安全、高效的视图绑定
  • 【渲染流水线】[应用阶段]-[裁剪]以UnityURP为例
  • CGAL Kernel 和 Traits 类深度解析:从官方教程到实践应用
  • prefetch 下载 GEO 数据注意事项
  • Milvus 向量数据库
  • 使用 Helm 在 Kubernetes 中安装 Milvus
  • 安装向量数据库Milvus
  • C++实现线程池(3)缓存线程池
  • Chrontel昆泰-【CH7036A-BF】CH7036 LVDS to HDMI/VGA/LVDS Converter
  • ​ubuntu22.04系统入门 (四)linux入门命令 权限管理、ACL权限、管道与重定向
  • Qt菜单栏与工具栏实战
  • 学习 Android(十四)NDK基础
  • VGG16训练和测试Fashion和CIFAR10
  • 利用C++11和泛型编程改进原型模式
  • 学习 Android(十五)NDK进阶及性能优化
  • 功能安全和网络安全的综合保障流程
  • 分布式事务Seata、LCN的原理深度剖析
  • vue中reactive()和ref()的用法
  • selenium操作指南
  • 状态模式及优化