1737. Change Minimum Characters to Satisfy One of Three Conditions
Description
You are given two strings a
and b
that consist of lowercase letters. In one operation, you can change any character in a
or b
to any lowercase letter.
Your goal is to satisfy one of the following three conditions:
- Every letter in
a
is strictly less than every letter inb
in the alphabet. - Every letter in
b
is strictly less than every letter ina
in the alphabet. - Both
a
andb
consist of only one distinct letter.
Return the minimum number of operations needed to achieve your goal.
Example 1:
Input: a = "aba", b = "caa" Output: 2 Explanation: Consider the best way to make each condition true: 1) Change b to "ccc" in 2 operations, then every letter in a is less than every letter in b. 2) Change a to "bbb" and b to "aaa" in 3 operations, then every letter in b is less than every letter in a. 3) Change a to "aaa" and b to "aaa" in 2 operations, then a and b consist of one distinct letter. The best way was done in 2 operations (either condition 1 or condition 3).
Example 2:
Input: a = "dabadd", b = "cda" Output: 3 Explanation: The best way is to make condition 1 true by changing b to "eee".
Constraints:
1 <= a.length, b.length <= 105
a
andb
consist only of lowercase letters.
Solutions
Solution 1: Counting + Enumeration
First, we count the number of occurrences of each letter in strings \(a\) and \(b\), denoted as \(cnt_1\) and \(cnt_2\).
Then, we consider condition \(3\), i.e., every letter in \(a\) and \(b\) is the same. We just need to enumerate the final letter \(c\), and then count the number of letters in \(a\) and \(b\) that are not \(c\). This is the number of characters that need to be changed.
Next, we consider conditions \(1\) and \(2\), i.e., every letter in \(a\) is less than every letter in \(b\), or every letter in \(b\) is less than every letter in \(a\). For condition \(1\), we make all characters in string \(a\) less than character \(c\), and all characters in string \(b\) not less than \(c\). We enumerate \(c\) to find the smallest answer. Condition \(2\) is similar.
The final answer is the minimum of the above three cases.
The time complexity is \(O(m + n + C^2)\), where \(m\) and \(n\) are the lengths of strings \(a\) and \(b\) respectively, and \(C\) is the size of the character set. In this problem, \(C = 26\).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|