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
i
andj
such thati < j
and the differencej - i
is 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.length
1 <= n <= 105
s1
ands2
consist 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).