{ "data": { "question": { "questionId": "3317", "questionFrontendId": "3035", "boundTopicId": null, "title": "Maximum Palindromes After Operations", "titleSlug": "maximum-palindromes-after-operations", "content": "
You are given a 0-indexed string array words
having length n
and containing 0-indexed strings.
You are allowed to perform the following operation any number of times (including zero):
\n\ni
, j
, x
, and y
such that 0 <= i, j < n
, 0 <= x < words[i].length
, 0 <= y < words[j].length
, and swap the characters words[i][x]
and words[j][y]
.Return an integer denoting the maximum number of palindromes words
can contain, after performing some operations.
Note: i
and j
may be equal during an operation.
\n
Example 1:
\n\n\nInput: words = ["abbb","ba","aa"]\nOutput: 3\nExplanation: In this example, one way to get the maximum number of palindromes is:\nChoose i = 0, j = 1, x = 0, y = 0, so we swap words[0][0] and words[1][0]. words becomes ["bbbb","aa","aa"].\nAll strings in words are now palindromes.\nHence, the maximum number of palindromes achievable is 3.\n\n
Example 2:
\n\n\nInput: words = ["abc","ab"]\nOutput: 2\nExplanation: In this example, one way to get the maximum number of palindromes is: \nChoose i = 0, j = 1, x = 1, y = 0, so we swap words[0][1] and words[1][0]. words becomes ["aac","bb"].\nChoose i = 0, j = 0, x = 1, y = 2, so we swap words[0][1] and words[0][2]. words becomes ["aca","bb"].\nBoth strings are now palindromes.\nHence, the maximum number of palindromes achievable is 2.\n\n\n
Example 3:
\n\n\nInput: words = ["cd","ef","a"]\nOutput: 1\nExplanation: In this example, there is no need to perform any operation.\nThere is one palindrome in words "a".\nIt can be shown that it is not possible to get more than one palindrome after any number of operations.\nHence, the answer is 1.\n\n
\n
Constraints:
\n\n1 <= words.length <= 1000
1 <= words[i].length <= 100
words[i]
consists only of lowercase English letters.total = sum(freq[ch] / 2)
for all 'a' <= ch <= 'z'
.",
"We can greedily try making palindromes from words[i]
with the smallest length to words[i]
with the longest length.",
"For the current index, i
, we try to make words[i]
a palindrome. We need len(words[i]) / 2
matching character pairs, and the letter in the middle (if it exists) can be freely chosen afterward.",
"We can check if we have enough pairs for index i
; if we do, we increase the number of palindromes we can make and decrease the number of pairs we have. Otherwise, we end the loop at this index.",
"The answer is the number of palindromes we were able to make in the end."
],
"solution": null,
"status": null,
"sampleTestCase": "[\"abbb\",\"ba\",\"aa\"]",
"metaData": "{\n \"name\": \"maxPalindromesAfterOperations\",\n \"params\": [\n {\n \"name\": \"words\",\n \"type\": \"string[]\"\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.
Your code is compiled with level two optimization (-O2
). AddressSanitizer is also enabled to help detect out-of-bounds and use-after-free bugs.
Most standard library headers are already included automatically for your convenience.
\"], \"java\": [\"Java\", \"OpenJDK 21
. Using compile arguments: --enable-preview --release 21
Most standard library headers are already included automatically for your convenience.
\\r\\nIncludes Pair
class from https://docs.oracle.com/javase/8/javafx/api/javafx/util/Pair.html.
Python 2.7.12
.
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\\nFor Map/TreeMap data structure, you may use sortedcontainers library.
\\r\\n\\r\\nNote 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.
Your code is compiled with level one optimization (-O2
). AddressSanitizer is also enabled to help detect out-of-bounds and use-after-free bugs.
Most standard library headers are already included automatically for your convenience.
\\r\\n\\r\\nFor hash table operations, you may use uthash. \\\"uthash.h\\\" is included by default. Below are some examples:
\\r\\n\\r\\n1. 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
.
Your code is run with --harmony
flag, enabling new ES6 features.
lodash.js library is included by default.
\\r\\n\\r\\nFor 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
Some common data structure implementations are provided in the Algorithms module: https://www.rubydoc.info/github/kanwei/algorithms/Algorithms
\"], \"swift\": [\"Swift\", \"Swift 5.9
.
You may use swift-algorithms 1.2.0 and swift-collections 1.0.6.
\"], \"golang\": [\"Go\", \"Go 1.21
Support https://godoc.org/github.com/emirpasic/gods@v1.18.1 library.
\"], \"python3\": [\"Python3\", \"Python 3.11
.
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\\nFor Map/TreeMap data structure, you may use sortedcontainers library.
\"], \"scala\": [\"Scala\", \"Scala 2.13.7
.
Kotlin 1.9.0
.
We are using an experimental compiler provided by JetBrains.
\"], \"rust\": [\"Rust\", \"Rust 1.74.1
Supports rand v0.6\\u00a0from crates.io
\"], \"php\": [\"PHP\", \"PHP 8.2
.
With bcmath module
\"], \"typescript\": [\"Typescript\", \"TypeScript 5.1.6, Node.js 20.10.0
.
Compile Options: --alwaysStrict --strictBindCallApply --strictFunctionTypes --target ES2022
Your code is run with --harmony
flag, enabling new ES2022 features.
lodash.js library is included by default.
\"], \"racket\": [\"Racket\", \"Racket CS v8.11
\\r\\n\\r\\nUsing #lang racket
Required data/gvector data/queue data/order data/heap
automatically for your convenience
Dart 3.2
\\r\\n\\r\\nYour code will be run directly without compiling
\"]}", "libraryUrl": null, "adminUrl": null, "challengeQuestion": null, "__typename": "QuestionNode" } } }