字符串的排列
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
输入:s1 = “ab” s2 = “eidbaooo”
输出:true
解释:s2 包含 s1 的排列之一 (“ba”).
我的:
class Solution {
public boolean checkInclusion(String s1, String s2) {
HashMap<Character,Integer> hms=new HashMap<Character,Integer>();
int left=0,right=s1.length();
while(right<=s2.length()){
hms.clear();
for(int j=0;j<s1.length();j++){
if(hms.containsKey(s1.charAt(j))){
hms.put(s1.charAt(j),hms.get(s1.charAt(j))+1);
}else{
hms.put(s1.charAt(j),1);
}
}
for(int i=left;i<right;i++){
if(!hms.containsKey(s2.charAt(i))){
left=left+1;
right=right+1;
break;
}
hms.put(s2.charAt(i),hms.get(s2.charAt(i))-1);
if(hms.get(s2.charAt(i))==0){
hms.remove(s2.charAt(i));
}
if(hms.isEmpty()){
return true;
}
}
}
return false;
}
}
借助hashmap来存储s1的组成字符与数量,然后再分别取定长的窗口进行比对