zoukankan      html  css  js  c++  java
  • 字符串的排列

    此博客链接:

    字符串的排列

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

    结果

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

    出来混总是要还的
  • 相关阅读:
    Java Image Processing
    贝塞尔曲线开发的艺术
    Ubuntu中Hadoop环境搭建
    FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造
    Linux环境下使用VSCode编译makefile文件的注意事项
    神经记忆模型
    深度学习推荐阅读的论文
    博客园无法发布文章解决办法
    计算机各个方向名校公开课
    软件过程基础
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/15068043.html
Copyright © 2011-2022 走看看