解法一:哈希表计数
首先使用两个哈希表mp1mp1mp1,mp2mp2mp2分别统计sss和targettargettarget中每个字母的个数。由于要统计target出现的次数,那么统计targettargettarget中每个单词在sss出现的最小次数,对于重复的字母来说那么需要将次数除以相应的重复次数。那么遍历targettargettarget所有字符,求出mp1[c]/mp2[c]mp1[c]/mp2[c]mp1[c]/mp2[c]的最小值即可。
- 时间复杂度:O(n)O(n)O(n)
- 空间复杂度:O(1)O(1)O(1)
class Solution {
public int rearrangeCharacters(String s, String t) {
int[] mp1 = new int[128], mp2 = new int[128];
for (char c : s.toCharArray()) mp1[c]++;
for (char c : t.toCharArray()) mp2[c]++;
int ans = 105;
for (char c : t.toCharArray()) ans = Math.min(mp1[c] / mp2[c], ans);;
return ans;
}
}
class Solution {
public:
int rearrangeCharacters(string s, string t) {
vector<int> mp1(26, 0), mp2(26, 0);
for (char& c : s) mp1[c - 'a']++;
for (char& c : t) mp2[c - 'a']++;
int ans = 105;
for (char&c : t) ans = min(mp1[c - 'a'] / mp2[c - 'a'], ans);;
return ans;
}
};
如果有问题,欢迎评论区交流, 如果有帮助到你,请给题解点个赞和收藏哈~~~