给定两个字符串s1
和s2
,如果s2
包含s1
的排列,则写一个函数返回true。 换句话说,第一个字符串的排列之一是第二个字符串的substring
。
一起战拖呀!
微信加【jiuzhang0607】备注【战拖】即可进入官方刷题群,团战offer!
- 输入的字符串只包含小写字母。
- 两个字符串的长度范围都为[1, 10,000]。
样例
样例1:
输入: s1 = "ab" s2 = "eidbaooo"
输出: true
解释: s2包含s1的一个排列("ba").
样例2:
输入: s1= "ab" s2 = "eidboaoo"
输出: false
bool checkInclusion(string &s1, string &s2) {
// write your code here
map<char, int>needMap;
for (auto it : s1)
{
needMap[it]++;
}
int curIndex = 0;
while (curIndex < s2.size())
{
if (needMap.count(s2[curIndex]) < 1)
{
curIndex++;
continue;
}
map<char, int>validMap;
validMap[s2[curIndex]]++;
curIndex++;
int i = 1;
while (i<s1.size())
{
if (needMap.count(s2[curIndex]) < 1 )
{
break;
}
if (needMap[s2[curIndex]] == validMap[s2[curIndex]])
{
break;
}
validMap[s2[curIndex]]++;
curIndex++;
i++;
}
if (i == s1.size())
{
return true;
}
}
return false;
}