字符串的排列

289 阅读1分钟

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。

换句话说,第一个字符串的排列之一是第二个字符串的子串。

示例1:

输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解释: s2 包含 s1 的排列之一 ("ba").

示例2:

输入: s1= "ab" s2 = "eidboaoo"
输出: False

注意:

  1. 输入的字符串只包含小写字母
  2. 两个字符串的长度都在 [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;
    }
}