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

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

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

    示例1:

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

     

    示例2:

    输入: s1= "ab" s2 = "eidboaoo"
    输出: False
    解法:开始想跑dfs 跑全排列,然后用KMP 去匹配,但是后来想了一下,不用那么复杂,因为全是小写字母,所以只需要s2 和s1 这段字符串的字符数量一样就可以了,
    因为s1 的子串可以重新组合,必然能和s2 匹配成功。
    class Solution {
    public:
        bool check(int a[])
        {
            for(int i=0;i<26;i++)
            {
                if(a[i]!=0)
                    return false;
            }
            return true;
        }
        bool checkInclusion(string s1, string s2) {
            int len1=s1.length();int len2=s2.length();
            if(len1>len2 || len1==0 || len2==0)
            {
                return false;
            }
            else
            {
                int a[26]={0};
                for(int i=0;i<len1;i++)
                {
                    a[s1[i]-'a']--;
                    a[s2[i]-'a']++;
                }
                for(int j=len1;j<len2;j++)
                {
                    if(check(a))
                    {
                        return true;
                    }
                    a[s2[j-len1]-'a']--;
                    a[s2[j]-'a']++;
                }
                return check(a);
            }
        }
    };
  • 相关阅读:
    js基本
    js循环语句
    常用的css
    Linux使用host-only的方式上网
    Struts2的文件上传及错误国际化显示
    ThinkPHP3.2.2 大写子母的用法及含义
    php中验证码不显示问题
    AOP中的ASPECTJ
    CGLIB和JDK代理
    mavne的创建
  • 原文地址:https://www.cnblogs.com/jkzr/p/10622052.html
Copyright © 2011-2022 走看看