最小包含兄弟子串的长度

str1 = “adabbca”;  str2 = "abc";

str1中包含str2的子串有abbc,bca,其中bca为最终结果,返回3

 1 // minLengthContain.cpp : 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <string>
 7
 8 using namespace std;
 9 int minLength(const string& str1,const string& str2)
10 {
11     int len1 = str1.length();
12     int len2 = str2.length();
13     if(len1 <= 0  || len2 <= 0 || len1 < len2)
14         return 0;
15
16     //记账:str2 的字符看成是str1[left...right]欠的
17     int map[256];
18     for(int i = 0; i < 256;i++)
19         map[i] = 0;
20     //memset(map,0,256);//只能初始化new出来的内容
21     for(int i = 0;i < len2;i++)
22         map[str2[i]]++;
23
24     int left = 0;
25     int right = 0;
26     int minLen = 100;
27     int match = len2;
28     while(right < len1)
29     {
30         //str1还账,可能多还但是也通过map记着
31         map[str1[right]]--;
32         if(map[str1[right]] >=0)
33             match--;//str1还过一次之后,此处还>=0,那么该次还账为有效
34
35         if(match == 0)
36         {
37             while(map[str1[left]] < 0)
38                 map[str1[left++]]++;//map为负,则为str1多还的,收回来
39
40             //遇到不为负,结算。
41             minLen = min(minLen,right-left+1);
42
43             match++;//同理进行以后的计算,更新minLen
44             map[str1[left++]]++;
45         }
46         right++;
47     }
48     return minLen == 100 ? 0 : minLen;
49 }
50
51 int _tmain(int argc, _TCHAR* argv[])
52 {
53     string str1 = "adabbca";
54     string str2 = "acb";
55     cout<<minLength(str1,str2)<<endl;
56     system("pause");
57     return 0;
58 }

时间: 2024-08-06 20:07:13

最小包含兄弟子串的长度的相关文章

hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)

病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19465    Accepted Submission(s): 4814 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿

最长公共子串的长度和构造

最长公共子串是两个字符串都包含的一个字符串,需要连续.例如: String s1 : abfc String s2: abcd "abc"是他们的最长公共子序列,但是‘c’在s1中与”ab“不连续,因此”ab“是两个字符串的最长公共子串. 简单总结下思路: 使用动态规划,用一个二维数组dp[i][j]表示 s1的1--i与s2的1--j的子串的最长公共子串.例如:dp[2][3] 表示s1的 ”ab“ 和s2的 ”abc“的最长公共子串.由子问题的结果逐步往上得到最终解.动态规划的最关

判断一个字符串是否包含一个子串的方法

在我们前端日常开发中,经常会遇到判断一个字符串中是否包含某个子串,在此篇文章,我们将去探究一些解决此种需求的方法以及正确的使用它们.理想情况下,我们要找的是一个能匹配我们的目的(if x contains y)的方法,并返回true或false. 一.String.prototype.indexOf和String.prototype.lastIndexOf i这两个方法,可能是我们最容易想到的,如果包含子串,则返回大于等于0的索引,否则返回-1,没有达到我们的理想情况. var str = "M

LeetCode: 3_Longest Substring Without Repeating Characters | 求没有重复字符的最长子串的长度 | Medium

题目: Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest s

求一字符串最长不重复字符子串的长度【Java 版】

一. 前言 最近学习有点断断续续,整理的一些知识点要么不完整,要么完全没搞懂,不好拿上台面,还是先在草稿箱躺着吧.偶尔在浏览大牛博客http://coolshell.cn的时候,发现大牛业余时间也在做编程训练http://coolshell.cn/articles/12052.html,作为一名想励志成为码农的测试猿,更应该在当下多利用业余时间,训练自己的编码能力,掌握好基础.那就开始吧,https://oj.leetcode.com/problems/ 二.正文 1.题目:Longest Su

Js判断一个字符串是否包含一个子串

Js中经常遇到判断一个字符串是否包含一个子串,java语言中有containes的方法,直接调用就可以了.除非引用第三方数据库,Js中没有contains方法. 为了实现更java语言中containes方法相同的效果,最简单的一种做法是利用js中字符串查找位置的方法indexOf(“o”大写).此方法的返回的值得可能有 -1,0,n(正整数)三种情况.0是当子串在字符串第1位开始包含的情况下返回,例子如下: <script> var str="he"; var strin

Given a string, find the length of the longest substring without repeating characters.(给定一个字符串,找到最长的子串的长度,这个子串不存在重复的字符。 )

Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", with the length of 1.

D - Milk Patterns (出现k次可重复的最长子串的长度)

题目链接:https://cn.vjudge.net/contest/283743#problem/D 题目大意:给你n个数,然后问你出现m次的最长子串的长度. 具体思路:和上一篇博客的内容差不多,这个是可重复的,就不需要考虑sa的问题了,每一次还是二分答案,判断出现的最长前缀就可以了.注意二分的时候,每一次的寻找,初始值为1,因为这个字符串就已经出现过一次了. AC代码: 1 #include<iostream> 2 #include<stack> 3 #include<c

【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew" 输出