给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
示例1:
输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解释: s2 包含 s1 的排列之一 ("ba").
示例2:
输入: s1= "ab" s2 = "eidboaoo"
输出: False
注意:
- 输入的字符串只包含小写字母
- 两个字符串的长度都在 [1, 10,000] 之间
解体思路: 1、先判断s1的长度是不是小于等于s2的长度 2、遍历s2字串,每次截取长度为s1的字串 3、判断s2的字串是否是s1的排列
class Solution {
public boolean exist(String s1, String s2){
int[] a = new int[256];
for( int i = 0; i < s1.length() ; i++ ){
a[s1.charAt( i )] ++;
}
for( int i = 0; i < s2.length() ; i++ ){
if( a[s2.charAt( i )] != 0 ){
a[s2.charAt( i )] -- ;
}else{
return false;
}
}
return true;
}
public boolean checkInclusion(String s1, String s2) {
if( s1.equals("") ) return true;
if( s1.length() > s2.length() ){
return false;
}
for( int i = 0; i <= s2.length() - s1.length(); i++){
String sub = s2.substring( i , i + s1.length() );
if( exist( sub , s1 ) ){
return true;
}
}
return false;
}
}