【LetMeFly】2839.判断通过操作能否让字符串相等 I:if-else(两两判断)
力扣题目链接:https://leetcode.cn/problems/check-if-strings-can-be-made-equal-with-operations-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 == 4s1和s2只包含小写英文字母。
解题方法:两两判断
字符串长度固定为 4 4 4,字符 s [ i ] s[i] s[i]只能与字符 s [ i + 2 ] s[i+2] s[i+2]交换,相当于第一个字符只能与第三个字符交换、第二个字符只能与第四个字符交换。
所以判断下两个字符串的第一个和第三个字符是否相等或交换后相等,并且第二第四个字符也相等或交换后相等,就好了。
- 时间复杂度 O ( 1 ) O(1) O(1)
- 空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C++
cpp
/*
* @LastEditTime: 2026-03-29 19:41:22
*/
#include <iostream>
class Solution {
private:
inline bool same2(const string& a, const string& b, int i, int j) {
return a[i] == b[i] && a[j] == b[j] || a[i] == b[j] && a[j] == b[i];
}
public:
bool canBeEqual(const string& s1, const string& s2) {
return same2(s1, s2, 0, 2) && same2(s1, s2, 1, 3);
}
};
AC,100.00%,100.00%
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源