Problem
You are given two strings s1 and s2, both of length n, consisting of lowercase English letters.
You can apply the following operation on any of the two strings any number of times:
- Choose any two indices
iandjsuch thati < jand the differencej - iis even, then swap the two characters at those indices in the string.
Return true** if you can make the strings s1 and s2 equal, and false otherwise**.
Example 1:
Input: s1 = "abcdba", s2 = "cabdab"
Output: true
Explanation: We can apply the following operations on s1:
- Choose the indices i = 0, j = 2. The resulting string is s1 = "cbadba".
- Choose the indices i = 2, j = 4. The resulting string is s1 = "cbbdaa".
- Choose the indices i = 1, j = 5. The resulting string is s1 = "cabdab" = s2.
Example 2:
Input: s1 = "abe", s2 = "bea"
Output: false
Explanation: It is not possible to make the two strings equal.
Constraints:
n == s1.length == s2.length1 <= n <= 105s1ands2consist only of lowercase English letters.
Solution (Java)
class Solution {
public boolean checkStrings(String s1, String s2) {
int[] odd = new int[26], even = new int[26];
for (int i = 0; i < s1.length(); ++i) {
if (i % 2 == 1) {
odd[s1.charAt(i) - 'a']++;
odd[s2.charAt(i) - 'a']--;
} else {
even[s1.charAt(i) - 'a']++;
even[s2.charAt(i) - 'a']--;
}
}
for (int i = 0; i < odd.length; ++i) {
if (odd[i] != 0 || even[i] != 0) return false;
}
return true;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).