最小包含子串的长度
2018-01-19 12:09
435 查看
//最小包含子串的长度
public class MinSubStringLen
{
//给定字符串str1和str2,求str1的子串中含有str2所有字符的最小子串长度)
public static int GetMinLen(String str1,String str2)
{
if(str1==null||str2==null||str1.length()<str2.length())
{
return 0;
}
char[]ch1=str1.toCharArray();
char[]ch2=str2.toCharArray();
int[]map=new int[256]; //充当hash表
for(int i=0;i<ch2.length;i++)
{
map[ch2[i]]++;
}
int left=0;
int right=0;
int match=ch2.length;
int minlen=Integer.MAX_VALUE; //匹配到的最短长度
while(right<ch1.length)
{
map[ch1[right]]--;
if(map[ch1[right]]>=0)
{
match--;
}
//匹配到字符串str2
if(match==0)
{
//匹配了多个
while(map[ch1[left]]<0)
{
map[ch1[left++]]++;
}
minlen=Math.min(minlen,right-left+1); //获得最短的长度
match++;
map[ch1[left++]]++; //str1收回str2匹配到的位置
}
right++;
}
return minlen==Integer.MAX_VALUE?0:minlen;
}
public static void main(String []args)
{
String str1="abcde";
String str2="ac";
String str3="adabbca";
String str4="acb";
System.out.println(GetMinLen(str1,str2));
System.out.println(GetMinLen(str3,str4));
}
}
相关文章推荐
- 字符串问题---最小包含子串的长度
- 最小包含兄弟子串的长度
- Minimum Window Substring, 包含子串的最小窗口,双指针
- 计算a、b字符串的不连续公共子串的长度(包含c字符串) ----hdu4681
- 一个字符串中包含另一个字符串所有字符的最短子串长度?——《编程之美》最短摘要的生成的简化
- 一个字符串中包含另一个字符串所有字符的最短子串长度?——《编程之美》最短摘要的生成的简化
- lc#3求字符串中不包含重复字符的最大长度子串
- 输入一个数,把它作为一个串,判断其中是否包含长度>=2的相同子串,如 果包含,返回1,不包含,返回0
- hdu2870子串长度子串最小数
- 找出此产品描述中包含N个关键字的长度最短的子串
- 最小覆盖子串的长度
- LeetCode 3. Longest Substring Without Repeating Characters--不包含重复字符的最长子串长度
- 面试题-求一个串包含另一个串的最大子串长度的解法
- 求一个只包含0,1,-1的数组,和为0的最长子串的长度
- tyvj 1170 0/1字符串问题 字符串中仅包含0和1两个字符;②字符串的长度为n;③字符串中不含有三个连续的相同子串 搜索
- Periodic Strings最小循环子串的长度
- 判断字符串及其子串是否是包含回文字,如果包含输出长度。
- 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能
- 密码最短长度为 7,其中必须包含以下非字母数字字符
- TCP报文的最大负载和报文的最小长度