首页 > 其他 > 详细

LeetCode 字符串的排列

时间:2019-03-29 16:23:54      阅读:243      评论:0      收藏:0      [点我收藏+]

给定两个字符串 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);
        }
    }
};

 

LeetCode 字符串的排列

原文:https://www.cnblogs.com/jkzr/p/10622052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!