您的位置:首页 > 其它

最小包含兄弟子串的长度

2016-08-14 22:22 204 查看
str1 = “adabbca”; str2 = "abc";

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

// minLengthContain.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;
int minLength(const string& str1,const string& str2)
{
int len1 = str1.length();
int len2 = str2.length();
if(len1 <= 0  || len2 <= 0 || len1 < len2)
return 0;

//记账:str2 的字符看成是str1[left...right]欠的
int map[256];
for(int i = 0; i < 256;i++)
map[i] = 0;
//memset(map,0,256);//只能初始化new出来的内容
for(int i = 0;i < len2;i++)
map[str2[i]]++;

int left = 0;
int right = 0;
int minLen = 100;
int match = len2;
while(right < len1)
{
//str1还账,可能多还但是也通过map记着
map[str1[right]]--;
if(map[str1[right]] >=0)
match--;//str1还过一次之后,此处还>=0,那么该次还账为有效

if(match == 0)
{
while(map[str1[left]] < 0)
map[str1[left++]]++;//map为负,则为str1多还的,收回来

//遇到不为负,结算。
minLen = min(minLen,right-left+1);

match++;//同理进行以后的计算,更新minLen
map[str1[left++]]++;
}
right++;
}
return minLen == 100 ? 0 : minLen;
}

int _tmain(int argc, _TCHAR* argv[])
{
string str1 = "adabbca";
string str2 = "acb";
cout<<minLength(str1,str2)<<endl;
system("pause");
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐