1. 程式人生 > >【LeetCode】567. 字串的排列

【LeetCode】567. 字串的排列

題目連結https://leetcode-cn.com/problems/permutation-in-string/description/

題目描述

給定兩個字串 s1 和 s2,寫一個函式來判斷 s2 是否包含 s1 的排列。

換句話說,第一個字串的排列之一是第二個字串的子串。

示例

輸入: s1 = “ab” s2 = “eidbaooo”
輸出: True
解釋: s2 包含 s1 的排列之一 (“ba”).

注意

  1. 輸入的字串只包含小寫字母
  2. 兩個字串的長度都在 [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; } };