此部落格連結:
字元串的排列
題目連結:https://leetcode-cn.com/problems/permutation-in-string/
題目
給定兩個字元串 s1 和 s2,寫一個函數來判斷 s2 是否包含 s1 的排列。
換句話說,第一個字元串的排列之一是第二個字元串的 子串 。
示例 1:
輸入: s1 = "ab" s2 = "eidbaooo"
輸出: True
解釋: s2 包含 s1 的排列之一 ("ba").
示例 2:
輸入: s1= "ab" s2 = "eidboaoo"
輸出: False
提示:
1 <= s1.length, s2.length <= 104
s1 和 s2 僅包含小寫字母
題解
每次在長的字元串中取和短字元串長度相等的字元串,從左向右周遊,周遊時,判斷長字元串的子串是否和短字元串有相同的字母。判斷字母是否相等時,我是使用兩個數組,數組長度分别為26,即26個字母的大小,然後用比較的字元串中的字母減去a得到數字作為數組的下标,并且指派為1,最後判斷兩個數組中1的個數是否相等,如果相等則判斷s1和s2有相同的字母。
代碼
class Solution {
public boolean checkInclusion(String s1, String s2) {
int len1=s1.length();
int len2=s2.length();
if(len1>len2)
{
return false;
}
int left=0;
int right=len1-1;
while(right<len2){
if(Equal(s1,s2.substring(left,right))){
return true;
left++;
right++;
}
}
return false;
}
public boolean Equal(String s1,String s2){
int c1[]=new int[26];
int c2[]=new int[26];
for(int i=0;i<s1.length();i++){
c1[s1.charAt(i)-'a']=1;
c2[s2.charAt(i)-'a']=1;
}
for(int i=0;i<26;i++){
if(c1[i]!=c2[i]){
return false;
}
}
return true;
}
}
結果
出來混總是要還的