字符串的排序

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14394806.html

字符串的排序

题目链接:https://leetcode-cn.com/problems/permutation-in-string/solution/hua-dong-chuang-kou-by-mu-da-bai-yi-ndu7/

题目

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

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

示例1:

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

示例2:

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

注意:

输入的字符串只包含小写字母
两个字符串的长度都在 [1, 10,000] 之间

题解

利用所谓的滑动窗口解题,利用数组存放s1的字符串和对应字符的个数,判断s2中是否存在s1中相同的字符。因为s1中的字符在s2中要求是相邻的,所以以s1字符串的长度在s2中找相应长度的字符串,判断是否一致,从s2的左侧开始比较,是否存在s1长度的字符串是和s1中的字符串是相等的。

代码

class Solution {
   public boolean checkInclusion(String s1, String s2) {
        int m = s1.length(), n = s2.length();
        if (m > n) return false;
        int str[]=new int[26];
        int str1[]=new int[26];
        for(int i=0;i<m;i++)
        {
            str[s1.charAt(i)-'a']++;
        }
        for(int i=0;i<=n-m;i++){
            for(int j=i;j<i+m;j++){
                str1[s2.charAt(j)-'a']++;
            }
            if(Arrays.equals(str,str1))
               return true;
            Arrays.fill(str1,0);
        }
      return false;
    }
}

 

结果

 

posted @ 2021-02-10 01:19  萍2樱释  阅读(126)  评论(0编辑  收藏  举报