zoukankan      html  css  js  c++  java
  • 1647. Minimum Deletions to Make Character Frequencies Unique

    package LeetCode_1647
    
    import java.util.*
    import kotlin.collections.HashMap
    
    /**
     * 1647. Minimum Deletions to Make Character Frequencies Unique
     * https://leetcode.com/problems/minimum-deletions-to-make-character-frequencies-unique/
     *
     * A string s is called good if there are no two different characters in s that have the same frequency.
    Given a string s, return the minimum number of characters you need to delete to make s good.
    The frequency of a character in a string is the number of times it appears in the string.
    For example, in the string "aab", the frequency of 'a' is 2, while the frequency of 'b' is 1.
    
    Example 1:
    Input: s = "aab"
    Output: 0
    Explanation: s is already good.
    
    Example 2:
    Input: s = "aaabbbcc"
    Output: 2
    Explanation: You can delete two 'b's resulting in the good string "aaabcc".
    Another way it to delete one 'b' and one 'c' resulting in the good string "aaabbc".
    
    Example 3:
    Input: s = "ceabaacb"
    Output: 2
    Explanation: You can delete both 'c's resulting in the good string "eabaab".
    Note that we only care about characters that are still in the string at the end (i.e. frequency of 0 is ignored).
    
    Constraints:
    1. 1 <= s.length <= 105
    2. s contains only lowercase English letters.
     * */
    class Solution {
        /*
        * solution: HashMap + HashSet, map to calculate appearance count, set to help reduce duplicate appearacne count
        * Time complexity:O(n), Space complexity:O(n)
        * */
        fun minDeletions(s: String): Int {
            val map = HashMap<Char, Int>()
            for (c in s) {
                map.put(c, map.getOrDefault(c, 0) + 1)
            }
            var result = 0
            val set = HashSet<Int>()
            for (item in map) {
                var value = item.value
                while (set.contains(value)) {//contains in HashSet is O(1)
                    value--
                    result++
                }
                if (value > 0) {
                    set.add(value)
                }
            }
            return result
        }
    }
  • 相关阅读:
    位运算专题
    状态压缩DP SRM 667 Div1 OrderOfOperations 250
    Codeforces Round #319 (Div. 2)
    (好题)树状数组+离散化+DFS序+离线/莫队 HDOJ 4358 Boring counting
    线段树+离散化 POJ 2528 Mayor's posters
    stack(单调栈) POJ 2082 Terrible Sets
    queue POJ 2259 Team Queue
    并查集 POJ 1703 Find them, Catch them
    线段树/树状数组 POJ 2182 Lost Cows
    01背包入门题集
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13943965.html
Copyright © 2011-2022 走看看