{ "data": { "question": { "questionId": "3360", "questionFrontendId": "3085", "boundTopicId": null, "title": "Minimum Deletions to Make String K-Special", "titleSlug": "minimum-deletions-to-make-string-k-special", "content": "

You are given a string word and an integer k.

\n\n

We consider word to be k-special if |freq(word[i]) - freq(word[j])| <= k for all indices i and j in the string.

\n\n

Here, freq(x) denotes the frequency of the character x in word, and |y| denotes the absolute value of y.

\n\n

Return the minimum number of characters you need to delete to make word k-special.

\n\n

 

\n

Example 1:

\n\n
\n

Input: word = "aabcaba", k = 0

\n\n

Output: 3

\n\n

Explanation: We can make word 0-special by deleting 2 occurrences of "a" and 1 occurrence of "c". Therefore, word becomes equal to "baba" where freq('a') == freq('b') == 2.

\n
\n\n

Example 2:

\n\n
\n

Input: word = "dabdcbdcdcd", k = 2

\n\n

Output: 2

\n\n

Explanation: We can make word 2-special by deleting 1 occurrence of "a" and 1 occurrence of "d". Therefore, word becomes equal to "bdcbdcdcd" where freq('b') == 2, freq('c') == 3, and freq('d') == 4.

\n
\n\n

Example 3:

\n\n
\n

Input: word = "aaabaaa", k = 2

\n\n

Output: 1

\n\n

Explanation: We can make word 2-special by deleting 1 occurrence of "b". Therefore, word becomes equal to "aaaaaa" where each letter's frequency is now uniformly 6.

\n
\n\n

 

\n

Constraints:

\n\n\n", "translatedTitle": null, "translatedContent": null, "isPaidOnly": false, "difficulty": "Medium", "likes": 158, "dislikes": 9, "isLiked": null, "similarQuestions": "[{\"title\": \"Minimum Deletions to Make Character Frequencies Unique\", \"titleSlug\": \"minimum-deletions-to-make-character-frequencies-unique\", \"difficulty\": \"Medium\", \"translatedTitle\": null}]", "exampleTestcases": "\"aabcaba\"\n0\n\"dabdcbdcdcd\"\n2\n\"aaabaaa\"\n2", "categoryTitle": "Algorithms", "contributors": [], "topicTags": [ { "name": "Hash Table", "slug": "hash-table", "translatedName": null, "__typename": "TopicTagNode" }, { "name": "String", "slug": "string", "translatedName": null, "__typename": "TopicTagNode" }, { "name": "Greedy", "slug": "greedy", "translatedName": null, "__typename": "TopicTagNode" }, { "name": "Sorting", "slug": "sorting", "translatedName": null, "__typename": "TopicTagNode" }, { "name": "Counting", "slug": "counting", "translatedName": null, "__typename": "TopicTagNode" } ], "companyTagStats": null, "codeSnippets": [ { "lang": "C++", "langSlug": "cpp", "code": "class Solution {\npublic:\n int minimumDeletions(string word, int k) {\n \n }\n};", "__typename": "CodeSnippetNode" }, { "lang": "Java", "langSlug": "java", "code": "class Solution {\n public int minimumDeletions(String word, int k) {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "Python", "langSlug": "python", "code": "class Solution(object):\n def minimumDeletions(self, word, k):\n \"\"\"\n :type word: str\n :type k: int\n :rtype: int\n \"\"\"\n ", "__typename": "CodeSnippetNode" }, { "lang": "Python3", "langSlug": "python3", "code": "class Solution:\n def minimumDeletions(self, word: str, k: int) -> int:\n ", "__typename": "CodeSnippetNode" }, { "lang": "C", "langSlug": "c", "code": "int minimumDeletions(char* word, int k) {\n \n}", "__typename": "CodeSnippetNode" }, { "lang": "C#", "langSlug": "csharp", "code": "public class Solution {\n public int MinimumDeletions(string word, int k) {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "JavaScript", "langSlug": "javascript", "code": "/**\n * @param {string} word\n * @param {number} k\n * @return {number}\n */\nvar minimumDeletions = function(word, k) {\n \n};", "__typename": "CodeSnippetNode" }, { "lang": "TypeScript", "langSlug": "typescript", "code": "function minimumDeletions(word: string, k: number): number {\n \n};", "__typename": "CodeSnippetNode" }, { "lang": "PHP", "langSlug": "php", "code": "class Solution {\n\n /**\n * @param String $word\n * @param Integer $k\n * @return Integer\n */\n function minimumDeletions($word, $k) {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "Swift", "langSlug": "swift", "code": "class Solution {\n func minimumDeletions(_ word: String, _ k: Int) -> Int {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "Kotlin", "langSlug": "kotlin", "code": "class Solution {\n fun minimumDeletions(word: String, k: Int): Int {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "Dart", "langSlug": "dart", "code": "class Solution {\n int minimumDeletions(String word, int k) {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "Go", "langSlug": "golang", "code": "func minimumDeletions(word string, k int) int {\n \n}", "__typename": "CodeSnippetNode" }, { "lang": "Ruby", "langSlug": "ruby", "code": "# @param {String} word\n# @param {Integer} k\n# @return {Integer}\ndef minimum_deletions(word, k)\n \nend", "__typename": "CodeSnippetNode" }, { "lang": "Scala", "langSlug": "scala", "code": "object Solution {\n def minimumDeletions(word: String, k: Int): Int = {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "Rust", "langSlug": "rust", "code": "impl Solution {\n pub fn minimum_deletions(word: String, k: i32) -> i32 {\n \n }\n}", "__typename": "CodeSnippetNode" }, { "lang": "Racket", "langSlug": "racket", "code": "(define/contract (minimum-deletions word k)\n (-> string? exact-integer? exact-integer?)\n )", "__typename": "CodeSnippetNode" }, { "lang": "Erlang", "langSlug": "erlang", "code": "-spec minimum_deletions(Word :: unicode:unicode_binary(), K :: integer()) -> integer().\nminimum_deletions(Word, K) ->\n .", "__typename": "CodeSnippetNode" }, { "lang": "Elixir", "langSlug": "elixir", "code": "defmodule Solution do\n @spec minimum_deletions(word :: String.t, k :: integer) :: integer\n def minimum_deletions(word, k) do\n \n end\nend", "__typename": "CodeSnippetNode" } ], "stats": "{\"totalAccepted\": \"17.1K\", \"totalSubmission\": \"39.1K\", \"totalAcceptedRaw\": 17093, \"totalSubmissionRaw\": 39059, \"acRate\": \"43.8%\"}", "hints": [ "Count the frequency of each letter.", "Suppose we select several characters as the final answer, and let x be the character with the smallest frequency in the answer. It can be shown that out of the selected characters, the optimal solution will never delete an occurrence of character x to obtain the answer.", "We will fix a character c and assume that it will be the character with the smallest frequency in the answer. Suppose its frequency is x.", "Then, for every other character, we will count the number of occurrences that will be deleted. Suppose that the current character has y occurrences.
  1. If y < x, we need to delete all of them.
  2. if y > x + k, we should delete y - x - k of such character.
  3. Otherwise we don’t need to delete it.
" ], "solution": null, "status": null, "sampleTestCase": "\"aabcaba\"\n0", "metaData": "{\n \"name\": \"minimumDeletions\",\n \"params\": [\n {\n \"name\": \"word\",\n \"type\": \"string\"\n },\n {\n \"type\": \"integer\",\n \"name\": \"k\"\n }\n ],\n \"return\": {\n \"type\": \"integer\"\n }\n}", "judgerAvailable": true, "judgeType": "large", "mysqlSchemas": [], "enableRunCode": true, "enableTestMode": false, "enableDebugger": true, "envInfo": "{\"cpp\": [\"C++\", \"

Compiled with clang 17 using the latest C++ 20 standard, and libstdc++ provided by GCC 11.

\\r\\n\\r\\n

Your code is compiled with level two optimization (-O2). AddressSanitizer is also enabled to help detect out-of-bounds and use-after-free bugs.

\\r\\n\\r\\n

Most standard library headers are already included automatically for your convenience.

\"], \"java\": [\"Java\", \"

OpenJDK 21. Using compile arguments: --enable-preview --release 21

\\r\\n\\r\\n

Most standard library headers are already included automatically for your convenience.

\\r\\n

Includes Pair class from https://docs.oracle.com/javase/8/javafx/api/javafx/util/Pair.html.

\"], \"python\": [\"Python\", \"

Python 2.7.12.

\\r\\n\\r\\n

Most libraries are already imported automatically for your convenience, such as array, bisect, collections. If you need more libraries, you can import it yourself.

\\r\\n\\r\\n

For Map/TreeMap data structure, you may use sortedcontainers library.

\\r\\n\\r\\n

Note that Python 2.7 will not be maintained past 2020. For the latest Python, please choose Python3 instead.

\"], \"c\": [\"C\", \"

Compiled with gcc 11 using the gnu11 standard.

\\r\\n\\r\\n

Your code is compiled with level one optimization (-O2). AddressSanitizer is also enabled to help detect out-of-bounds and use-after-free bugs.

\\r\\n\\r\\n

Most standard library headers are already included automatically for your convenience.

\\r\\n\\r\\n

For hash table operations, you may use uthash. \\\"uthash.h\\\" is included by default. Below are some examples:

\\r\\n\\r\\n

1. Adding an item to a hash.\\r\\n

\\r\\nstruct hash_entry {\\r\\n    int id;            /* we'll use this field as the key */\\r\\n    char name[10];\\r\\n    UT_hash_handle hh; /* makes this structure hashable */\\r\\n};\\r\\n\\r\\nstruct hash_entry *users = NULL;\\r\\n\\r\\nvoid add_user(struct hash_entry *s) {\\r\\n    HASH_ADD_INT(users, id, s);\\r\\n}\\r\\n
\\r\\n

\\r\\n\\r\\n

2. Looking up an item in a hash:\\r\\n

\\r\\nstruct hash_entry *find_user(int user_id) {\\r\\n    struct hash_entry *s;\\r\\n    HASH_FIND_INT(users, &user_id, s);\\r\\n    return s;\\r\\n}\\r\\n
\\r\\n

\\r\\n\\r\\n

3. Deleting an item in a hash:\\r\\n

\\r\\nvoid delete_user(struct hash_entry *user) {\\r\\n    HASH_DEL(users, user);  \\r\\n}\\r\\n
\\r\\n

\"], \"csharp\": [\"C#\", \"

C# 12 with .NET 8 runtime

\"], \"javascript\": [\"JavaScript\", \"

Node.js 20.10.0.

\\r\\n\\r\\n

Your code is run with --harmony flag, enabling new ES6 features.

\\r\\n\\r\\n

lodash.js library is included by default.

\\r\\n\\r\\n

For Priority Queue / Queue data structures, you may use 5.4.0 version of datastructures-js/priority-queue and 4.2.3 version of datastructures-js/queue.

\"], \"ruby\": [\"Ruby\", \"

Ruby 3.2

\\r\\n\\r\\n

Some common data structure implementations are provided in the Algorithms module: https://www.rubydoc.info/github/kanwei/algorithms/Algorithms

\"], \"swift\": [\"Swift\", \"

Swift 5.9.

\\r\\n\\r\\n

You may use swift-algorithms 1.2.0 and swift-collections 1.0.6.

\"], \"golang\": [\"Go\", \"

Go 1.21

\\r\\n

Support https://pkg.go.dev/github.com/emirpasic/gods@v1.18.1 and https://pkg.go.dev/github.com/emirpasic/gods/v2@v2.0.0-alpha library.

\"], \"python3\": [\"Python3\", \"

Python 3.11.

\\r\\n\\r\\n

Most libraries are already imported automatically for your convenience, such as array, bisect, collections. If you need more libraries, you can import it yourself.

\\r\\n\\r\\n

For Map/TreeMap data structure, you may use sortedcontainers library.

\"], \"scala\": [\"Scala\", \"

Scala 3.3.1.

\"], \"kotlin\": [\"Kotlin\", \"

Kotlin 1.9.0.

\\r\\n\\r\\n

We are using an experimental compiler provided by JetBrains.

\"], \"rust\": [\"Rust\", \"

Rust 1.74.1

\\r\\n\\r\\n

Supports rand v0.6\\u00a0from crates.io

\"], \"php\": [\"PHP\", \"

PHP 8.2.

\\r\\n

With bcmath module

\"], \"typescript\": [\"Typescript\", \"

TypeScript 5.1.6, Node.js 20.10.0.

\\r\\n\\r\\n

Compile Options: --alwaysStrict --strictBindCallApply --strictFunctionTypes --target ES2022

\\r\\n\\r\\n

Your code is run with --harmony flag, enabling new ES2022 features.

\\r\\n\\r\\n

lodash.js library is included by default.

\"], \"racket\": [\"Racket\", \"

Racket CS v8.11

\\r\\n\\r\\n

Using #lang racket

\\r\\n\\r\\n

Required data/gvector data/queue data/order data/heap automatically for your convenience

\"], \"erlang\": [\"Erlang\", \"Erlang/OTP 26\"], \"elixir\": [\"Elixir\", \"Elixir 1.15 with Erlang/OTP 26\"], \"dart\": [\"Dart\", \"

Dart 3.2

\\r\\n\\r\\n

Your code will be run directly without compiling

\"]}", "libraryUrl": null, "adminUrl": null, "challengeQuestion": null, "__typename": "QuestionNode" } } }