双指针算法
import java.util.*;
public class Solution {
/**
*
* @param str1 string字符串
* @param str2 string字符串
* @return string字符串
*/
public String getMinString (String str1, String str2) {
if(str2.equals("")) return str1;
int[] cnt1 = new int[128];
int[] cnt2 = new int[128];
char[] s1 = str1.toCharArray();
char[] s2 = str2.toCharArray();
int n = s1.length, m = s2.length;
for(int i=0; i < n; i++)
cnt1[s1[i]]++;
for(int j=0; j < m; j++)
cnt2[s2[j]]++;
for(int i=0; i < 128; i++)
if(cnt2[i] != 0 && cnt2[i] > cnt1[i]) {
return "";
}
String res = str1;
int left = 0, right = 0;
for(int j=n-1; j >= 0; j--)
if(--cnt1[s1[j]] < cnt2[s1[j]]){
cnt1[s1[j]]++;
right = j; break;
}
while(right < n) {
while(cnt1[s1[left]] > cnt2[s1[left]])
cnt1[s1[left++]]--;
if(res.length() > right-left+1)
res = str1.substring(left,right+1);
right ++;
while(right < n && s1[right] != s1[left])
right++;
left++;
}
return res;
}
}