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)); } }
运行结果: