18.8 Given a string s and an array of smaller strings T, design a method to search s for each small string in T.

这道题给我们一个字符串s,和一个字符串数组T,让我们找T中的每一个小字符串在s中出现的位置,这道题很适合用后缀树Suffix Tree来做,LeetCode中有几道关于前缀树(Prefix Tree, Trie)的题,Implement Trie (Prefix Tree),Word Search II,和 Add and Search Word - Data structure design 。前缀树和后缀树比较相似,都是很重要的数据结构,在解决特定问题时非常有效,具体讲解请参见这个帖子。参见代码如下:

class SuffixTreeNode {
public:unordered_map<char, SuffixTreeNode*> children;char value;vector<int> indexes;void insertString(string s, int idx) {indexes.push_back(idx);if (!s.empty()) {value = s[0];SuffixTreeNode *child;if (children.count(value)) {child = children[value];} else {child = new SuffixTreeNode();children[value] = child;}string remainder = s.substr(1);child->insertString(remainder, idx);}}vector<int> search(string s) {if (s.empty()) return indexes;char first = s[0];if (children.count(first)) {string remainder = s.substr(1);return children[first]->search(remainder);}return {};}
};class SuffixTree {
public:SuffixTreeNode *root = new SuffixTreeNode();SuffixTree(string s) {for (int i = 0; i < s.size(); ++i) {string suffix = s.substr(i);root->insertString(suffix, i);}}vector<int> search(string s) {return root->search(s);}
};

本文转自博客园Grandyang的博客,原文链接: 搜索字符串[CareerCup] 18.8 Search String,如需转载请自行联系原博主。

[CareerCup] 18.8 Search String 搜索字符串相关推荐

  1. 获得Google搜索字符串中的关键字

    /// <summary>   /// 获得Google搜索字符串中的关键字   /// </summary>   /// <returns></return ...

  2. java 字符串查找程序_java-如何在JAR文件中搜索字符串

    java-如何在JAR文件中搜索字符串 我的应用程序基于Java EE构建. 我在此应用程序中大约有50个罐子. 是否可以搜索特定的关键字(实际上我想搜索关键字BEGIN REQUEST)? user ...

  3. 0717 抽象类/接口/异常/==-equals()/搜索字符串/包装类型(统计字符数)/hashCode()/StringBuffer/pingSQL/2018年美式日历

    抽象类与接口   什么是抽象类?   有一些类没有必要实例化,实例化没有意义,它可以封装通用   的业务代码   Animal -- 没有必要实例化   Dog   Cat   Fish ... 抽象 ...

  4. C++words search单词搜索的算法实现(附完整源码)

    C++words search单词搜索的算法实现 C++words search单词搜索的算法实现完整源码(定义,实现,main函数测试) C++words search单词搜索的算法实现完整源码(定 ...

  5. string型字符串

    1::char和string比较 #include <iostream> #include <string> using namespace std; int main() { ...

  6. java用 拼接字符串的原理_Java String 拼接字符串原理详解

    首先来一道思考题: String str1 = "111111"; String str2 = "222222"; String str = str1 + st ...

  7. 程序员面试金典——18.7最长合成字符串

    程序员面试金典--18.7最长合成字符串 参考网址:https://www.nowcoder.com/profile/2896594/codeBookDetail?submissionId=13543 ...

  8. String类字符串习题作业

    编写程序将 "jdk" 全部变为大写,并输出到屏幕,截取子串"DK" 并输出到屏幕 public class Test4 {public static void ...

  9. 身份证号码是18位数字字符构成的字符串,输入一个身份证号码判断该号码拥有者的性别

    /*身份证号码是18位数字字符构成的字符串,输入一个身份证号码判断该号码拥有者的性别 提示:第17为数字字符奇数为男,偶数为女 */ #include #include #include #inclu ...

最新文章

  1. 舒工给您娓娓道来:2019-nCoV,教室布局筛查追溯系统算法解密!
  2. es6 原生构造函数的继承
  3. ORACLE RMAN备份--差异增量与累积增量的策略实例图
  4. 计算机的各种配件知识,菜鸟必读:DIY装机需要知道的一些配件小知识
  5. win7系统声卡驱动安装失败怎么办--win7w.com
  6. dede 表单必填_dede自定义表单“必填项”设置方法
  7. centos检测不到磁盘_安装centos6.3显示找不到硬盘怎么办
  8. datamap excel插件_Excel地图插件 DataMap
  9. 【Docker 那些事儿】如何安全地停止、删除容器
  10. js html显示emoji表情,js emoji表情长度判断
  11. 深度学习 基础硬件CPU GPU知识笔记
  12. pc端双六边形重叠效果(带边框的六边形)
  13. 「CF1463A」暗黑地牢
  14. 如何获取OpenAI API Key
  15. 广东2022年养老金计发基数为8682元,人们都能领这样多养老金吗
  16. Ubuntu 网络管理
  17. html精灵图坐标如何确定,CSS实现精灵图与字体图标
  18. java项目开发实例基于SSM的公司员工管理系统含论文+开题报告
  19. linux没有ifconfig命令
  20. lightroom使用小结一 导入和优化设置

热门文章

  1. play 1.2.4的action执行前后的加载逻辑
  2. [Objective C] 获取类和对象的运行时状态
  3. linux高亮 查日志
  4. 驱动重构SDN/NFV奠定未来网络基石
  5. BZOJ 2555: SubString [后缀自动机 LCT]
  6. 轻松精通数据库管理之道——运维巡检之六(作业运行情况)
  7. Android应用内存泄漏的定位、分析与解决策略
  8. UVa 10945 - Mother bear
  9. libqrencode 3.4.3 发布,二维码的C解析库
  10. 2013-我的前事今生(完结篇)