【LeetCode】567. 字串的排列
阿新 • • 發佈:2018-11-10
題目連結:https://leetcode-cn.com/problems/permutation-in-string/description/
題目描述
給定兩個字串 s1 和 s2,寫一個函式來判斷 s2 是否包含 s1 的排列。
換句話說,第一個字串的排列之一是第二個字串的子串。
示例
輸入: s1 = “ab” s2 = “eidbaooo”
輸出: True
解釋: s2 包含 s1 的排列之一 (“ba”).
注意:
- 輸入的字串只包含小寫字母
- 兩個字串的長度都在 [1, 10,000] 之間
解決方法
首先用迴圈擷取s2中與s1等長的子串,再將每個子串與s1比較是否是排列
class Solution {
public:
bool checkInclusion(string s1, string s2) {
//首先用迴圈擷取s2中與s1等長的子串,再將每個子串與s1比較是否是排列
if (s1.size()>s2.size()) return false;
if (s1.size()==0) return true;
else if (s2.size()==0) return false;
for (int i=0;i<=s2.size()-s1. size();i++){
string sub=s2.substr(i,s1.size());
if (checkSam(s1,sub))
return true;
}
return false;
}
private://判斷一個字串是否是另一個字串的排列
bool checkSam(string sa,string sb){
vector<int> numa(125,0);
vector<int> numb (125,0);
for (int i=0;i<sa.size();i++){
numa[sa[i]]++;
numb[sb[i]]++;
}
for (int i=0;i<125;i++){
if (numa[i]!=numb[i])
return false;
}
return true;
}
};