Permutation in String
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string's permutations is the substring of the second string.
Example 1:
Input:s1 = "ab" s2 = "eidbaooo" Output:True Explanation: s2 contains one permutation of s1 ("ba").
Example 2:
Input:s1= "ab" s2 = "eidboaoo" Output: False
Note:
- The input strings only contain lower case letters.
- The length of both given strings is in range [1, 10,000].
先统计S1中所有字母数,然后从头遍历S2查看s2中每个跟s1长度相同的字符串中字母数是否相同,相同的话表明可以组成,不同的话统计下一个字符串,若所有字符串都不同则不存在s1的排列。
代码:
class Solution {
public:
bool checkInclusion(string s1, string s2) {
int s1length=s1.size();
vector<int>table(30,0);
for (int i=0; i<s1length; i++)
{
table[s1[i]-'a']++;
}
int s2length=s2.size();
if (s2length<s1length)
return false;
for (int i=0; i<=(s2length-s1length); i++)
{
vector<int>table1=table;
int flag=0;
for (int j=0; j<s1length; j++)
{
table1[s2[j+i]-'a']--;
if ( table1[s2[j+i]-'a']<0)
{
flag=1;
break;
}
}
if (flag==0)
return true;
}
return false;
}
};