[CTCI] 子串判断

子串判断

题目描述

现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串。

给定一个string数组p和它的大小n,同时给定string s,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串。保证p中的串长度小于等于8,且p中的串的个数小于等于500,同时保证s的长度小于等于1000。

测试样例:

["a","b","c","d"],4,"abc"
返回:[true,true,true,false]


后缀数组?二分查找!

 1 class Substr {
 2 public:
 3     bool matched(string a, string b) {
 4         if (b.length() < a.length()) return false;
 5         for (int i = 0; i < a.length(); ++i) if (a[i] != b[i]) return false;
 6         return true;
 7     }
 8     vector<bool> chkSubStr(vector<string> p, int n, string s) {
 9         // write code here
10         set<string> st;
11         vector<bool> res;
12         for (int i = 0; i < s.length(); ++i) {
13             st.insert(s.substr(i));
14         }
15         for (int i = 0; i < n; ++i) {
16             auto it = st.lower_bound(p[i]);
17             if (it == st.end()) {
18                 res.push_back(false);
19             } else {
20                 if (matched(p[i], *it)) res.push_back(true);
21                 else res.push_back(false);
22             }
23         }
24         return res;
25     }
26 };
时间: 2024-08-27 20:07:36

[CTCI] 子串判断的相关文章

C++ 在字符串中插入子串+判断字符串是否由空格组成

// Example3.cpp : 定义控制台应用程序的入口点. #include "StdAfx.h" #include <string> #include <iostream> using namespace std; int main(void) { string str,str1,str2; int index; //判断截取的子串是否由blanks组成 str=" cjc is a master."; str1="cjc

二十三:子串判断

问题 B: 子串判断题目描述写一段程序用来判断一个字符串是否出现在另一个字符串中输入两个字符串(字符串最大长度为100)输出yes或no样例输入ababfababkr样例输出 yes 方法一: 1 #include<stdio.h> 2 void fun(char str1[],char str2[],int n,int m){ 3 int i,j,l; 4 for(j=0;j<m-1;j++){ 5 i=0; 6 if(str1[i]==str2[j]){ 7 int k=j; 8 w

子串判断

题目描述 现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串. 给定一个string数组p和它的大小n,同时给定string s,为母串,请返回一个bool数组,每个元素代表p中的对应字符串是否为s的子串.保证p中的串长度小于等于8,且p中的串的个数小于等于500,同时保证s的长度小于等于1000. 测试样例: ["a","b","c","d&qu

2019 ICPC 南昌网络赛 - Subsequence (子串判断,预处理,超时)

?? ?? ?? 题意:一个字符串s,t个字符串p,判断p是不是s的子序列 预处理出对于字符串s,每个位置i之后第一个字母x的位置,匹配子序列的时候就相当于在母串上往后跳,如果跳到母串末尾,子序列还没有结束,匹配失败. 然而!超时了QAQ,只能过八组样例,网上也只能找到过九组的,,,希望有哪位大神路过指点一下了 int tag[33],nxt[MAXN][30]; char s[MAXN],p[MAXN]; void init() { int n=strlen(s); for(int j=0;j

转载:LeetCode:5Longest Palindromic Substring 最长回文子串

本文转自:http://www.cnblogs.com/TenosDoIt/p/3675788.html 题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 求字符串的最长回文子串 算法1:暴

[BZOJ]1014 火星人prefix(JSOI2008)

一边听省队dalao讲课一边做题真TM刺激. BZOJ的discuss简直就是题面plus.大样例.SuperHINT.dalao题解的结合体. Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 11 字符 m a d a m i m a d a m 现在,火星人定义了一个函数LCQ(x, y),表示:该字符串中第x个字符开始的字串

python--字符串类型

*************** 字符串类型 ***************1.字符串的定义: 第一种方式:str1 = 'our company is westos'第二种方式:str2 = "our company is westos"第三种方式:str3 = """our company is westos""" 2.转义符号一个反斜线加一个单一字符可以表示一个特殊字符,通常是不可打印的字符\n: 代表换行符 \"

【算法】leetcode之 Palindrome Partitioning I&amp;II(转载)

1 Palindrome Partitioning 问题来源:Palindrome Partitioning 该问题简单来说就是给定一个字符串,将字符串分成多个部分,满足每一部分都是回文串,请输出所有可能的情况. 该问题的难度比较大,很可能第一次遇到没有思路,这很正常.下面我们一点点分析,逐步理清思路.先不考虑所有的情况,针对一个符合条件的划分,每一部分都是一个回文子串,而且各部分的长度不固定.也即每一部分都是原始字符串的一个子串,且满足回文条件.所有的划分都满足上述条件,所以这就启发我们首先判

iOS开发中的单元测试(三)——URLManager中的测试用例解析

本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid=8088 此前,我们在<iOS开发中的单元测试(一)&(二)>中介绍了从使用者的角度对比当下比较流行的两款单元测试框架OCUnit和GHUnit,这篇文章中我们将介绍一款导航控件URLManager. URLManager是一个基于UINavigationController和UIViewController,以URL Scheme为设计基础的导航控件,目的是实现ViewCont