leetcode 1525 字串的好分割數目(雜湊表,字串分割)

peachzy發表於2020-10-20

題目描述:
給你一個字串 s ,一個分割被稱為 「好分割」 當它滿足:將 s 分割成 2 個字串 p 和 q ,它們連線起來等於 s 且 p 和 q 中不同字元的數目相同。

請你返回 s 中好分割的數目。

示例 1:

輸入:s = “aacaba”
輸出:2
解釋:總共有 5 種分割字串 “aacaba” 的方法,其中 2 種是好分割。
(“a”, “acaba”) 左邊字串和右邊字串分別包含 1 個和 3 個不同的字元。
(“aa”, “caba”) 左邊字串和右邊字串分別包含 1 個和 3 個不同的字元。
(“aac”, “aba”) 左邊字串和右邊字串分別包含 2 個和 2 個不同的字元。這是一個好分割。
(“aaca”, “ba”) 左邊字串和右邊字串分別包含 2 個和 2 個不同的字元。這是一個好分割。
(“aacab”, “a”) 左邊字串和右邊字串分別包含 3 個和 1 個不同的字元。

思路:
首先用一個map,記錄整個字串的不同字元的個數
然後在用一個map記錄,分割出來的字串的不同自負的個數
比較大小,記錄結果

程式碼如下:

class Solution {
public:
    int numSplits(string s) {
        int res=0;
        unordered_map<char,int> map1,map2;
        for(char ch:s){
            map1[ch]++;
        }
        int num=map1.size();
        for(int i=0;i<s.size()-1;i++){
            map1[s[i]]--;
            map2[s[i]]++;
            if(map1[s[i]]==0) num--;
            if(map2.size()==num) res++;
        }
        return res;
    }
};

相關文章