字符串的排列

此博客链接:

字符串的排列

题目链接: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;
   }
    
}

 

结果

但是程序报错,显示我定义的左指针有问题,我没有看出哪里有问题。

 

posted @ 2021-07-27 21:38  萍2樱释  阅读(89)  评论(0编辑  收藏  举报