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
ais strictly less than every letter inbin the alphabet. - Every letter in
bis strictly less than every letter inain the alphabet. - Both
aandbconsist 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 <= 105aandbconsist 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 | |