p567-字符串的排列

package zifuchuan;
/*
567. 字符串的排列
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。

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

示例1:

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


示例2:

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


注意:

输入的字符串只包含小写字母
两个字符串的长度都在 [1, 10,000] 之间
 */
public class p567 {
    public static boolean checkInclusion(String s1, String s2) {
        if(s1.length()>s2.length())return  false;
        int len1=s1.length();
        for(int i=0;i<s2.length()-s1.length()+1;i++){
            String tmpStr=s2.substring(i,i+len1);
            if(isSimilar(s1,tmpStr))return true;
        }
        return false;


    }
    public static boolean isSimilar(String s1,String s2){
        if(s1.length()!=s2.length())return false;
        int count[]=new int[26];
        for(int i=0;i<s1.length();i++)count[s1.charAt(i)-'a']++;
        for(int i=0;i<s2.length();i++)count[s2.charAt(i)-'a']--;
        for(int i=0;i<26;i++){
            if(count[i]!=0)return false;
        }
        return true;
    }
    public static void main(String[] args) {
        String s1="adc";
        String s2="dcda";
        //System.out.println(s1.compareTo(s2));
        System.out.println(checkInclusion(s1,s2));
    }
}

  运行结果:

原文地址:https://www.cnblogs.com/jifeng0902/p/13626776.html