字符串问题之 最小包含子串长度

str1 和 str2  求str1 的子串 中含有str2 的所有字符的最小字串长度

   例如: 

 str1 ="abcde"

 str2="ac"    返回3

本题适合用还款方法  str1 去还 str2 里面的元素

package TT;

public class Test7 {

    public static int minLength(String str1, String str2){
          
        if(str1 == null || str2 == null || str1.length() < str2.length()){
            return 0;
        }
        char[] chas1 =  str1.toCharArray();
        char[] chas2 =  str2.toCharArray();
        int[] map = new int[256];
        
        for(int i = 0; i!=chas2.length;i++){
            map[chas2[i]]++;
        }
        
        int left = 0;
        int right = 0;
        int match = chas2.length;
        int minLen = Integer.MAX_VALUE;
        
        while(right != chas1.length){
            
            map[chas1[right]]--;
            if(map[chas1[right]] >=0){
                 match--;
            }
            if(match==0){
                
                while(map[chas1[left]]<0){
                    map[chas1[left++]]++;
                }
                
                minLen = Math.min(minLen, right-left+1);
                match++;
                map[chas1[left++]]++;
            }
            right++;
        }
        
        return minLen == Integer.MAX_VALUE ? 0 :minLen;
        
    }
    
    
    
    public static void main(String[] args){
        
         String str1 ="abcde";
         String str2 = "ac";
         int a  =  minLength(str1, str2);
         System.out.println(a);
        
        
    }
    
    
}

 

posted @ 2017-08-22 21:03  toov5  阅读(2714)  评论(0编辑  收藏  举报