class Solution {
public:
bool canBeEqual(string s1, string s2) {
}
};
7021. 判断通过操作能否让字符串相等 I
给你两个字符串 s1
和 s2
,两个字符串的长度都为 4
,且只包含 小写 英文字母。
你可以对两个字符串中的 任意一个 执行以下操作 任意 次:
i
和 j
且满足 j - i = 2
,然后 交换 这个字符串中两个下标对应的字符。如果你可以让字符串 s1
和 s2
相等,那么返回 true
,否则返回 false
。
示例 1:
输入:s1 = "abcd", s2 = "cdab" 输出:true 解释: 我们可以对 s1 执行以下操作: - 选择下标 i = 0 ,j = 2 ,得到字符串 s1 = "cbad" 。 - 选择下标 i = 1 ,j = 3 ,得到字符串 s1 = "cdab" = s2 。
示例 2:
输入:s1 = "abcd", s2 = "dacb" 输出:false 解释:无法让两个字符串相等。
提示:
s1.length == s2.length == 4
s1
和 s2
只包含小写英文字母。原站题解
php 解法, 执行用时: 8 ms, 内存消耗: 19.1 MB, 提交时间: 2023-09-04 09:41:29
class Solution { /** * @param String $s1 * @param String $s2 * @return Boolean */ function canBeEqual($s1, $s2) { $arr1 = array_fill(0, 2, array_fill(0, 26, 0)); $arr2 = array_fill(0, 2, array_fill(0, 26, 0)); for ( $i = 0; $i < strlen($s1); $i++ ) { $arr1[$i % 2][ord($s1[$i]) - ord('a')]++; $arr2[$i % 2][ord($s2[$i]) - ord('a')]++; } return $arr1 == $arr2; } }
golang 解法, 执行用时: 0 ms, 内存消耗: 2.2 MB, 提交时间: 2023-09-04 09:36:00
func canBeEqual(s1, s2 string) bool { var cnt1, cnt2 [2][26]int for i, c := range s1 { cnt1[i%2][c-'a']++ cnt2[i%2][s2[i]-'a']++ } return cnt1 == cnt2 }
cpp 解法, 执行用时: 4 ms, 内存消耗: 5.9 MB, 提交时间: 2023-09-04 09:35:38
class Solution { public: bool canBeEqual(string s1, string s2) { int cnt1[2][26]{}, cnt2[2][26]{}; for (int i = 0; i < s1.length(); i++) { cnt1[i % 2][s1[i] - 'a']++; cnt2[i % 2][s2[i] - 'a']++; } return memcmp(cnt1, cnt2, sizeof(cnt1)) == 0; } };
java 解法, 执行用时: 2 ms, 内存消耗: 41.1 MB, 提交时间: 2023-09-04 09:35:23
class Solution { public boolean canBeEqual(String s1, String s2) { var cnt1 = new int[2][26]; var cnt2 = new int[2][26]; for (int i = 0; i < s1.length(); i++) { cnt1[i % 2][s1.charAt(i) - 'a']++; cnt2[i % 2][s2.charAt(i) - 'a']++; } return Arrays.deepEquals(cnt1, cnt2); } }
python3 解法, 执行用时: 72 ms, 内存消耗: 15.9 MB, 提交时间: 2023-09-04 09:35:05
# 所有相距偶数位的下标可随意更换 class Solution: def canBeEqual(self, s1: str, s2: str) -> bool: return Counter(s1[::2]) == Counter(s2[::2]) and Counter(s1[1::2]) == Counter(s2[1::2])