Java C++ leetcode执行一次字符串交换能否使两个字符串相等
目录
- 题目要求
- 思路:模拟
- Java
- C++
- Rust
题目要求
思路:模拟
Java
class Solution { public boolean areAlmostEqual(String s1, String s2) { if (s1.length() != s2.length()) return false; int a = -1, b = -1; for (int i = 0; i < s1.length(); i++) { if (s1.charAt(i) == s2.charAt(i)) continue; if (a == -1) a = i; // 第一个不同 else if (b == -1) b = i; // 第二个不同 else return false; // 两个以上不相同 } if (a == -1) // 全相同 return true; if (a != -1 && b == -1) // 一个不同 return false; return s1.charAt(a) == s2.charAt(b) && s1.charAt(b) == s2.charAt(a); // 不同位置字符相同 } }
- 时间复杂度:O(n)
- 空间复杂度:O(1)
C++
class Solution { public: bool areAlmostEqual(string s1, string s2) { if (s1.size() != s2.size()) return false; int a = -1, b = -1; for (int i = 0; i < s1.size(); i++) { if (s1[i] == s2[i]) continue; if (a == -1) a = i; // 第一个不同 else if (b == -1) b = i; // 第二个不同 else return false; // 两个以上不相同 } if (a == -1) // 全相同 return true; if (a != -1 && b == -1) // 一个不同 return false; return s1[a] == s2[b] && s1[b] == s2[a]; // 不同位置字符相同 } };
- 时间复杂度:O(n)
- 空间复杂度:O(1)
Rust
- 记得要把字符串改成可操作的……
impl Solution { pub fn are_almost_equal(s1: String, s2: String) -> bool { if (s1.len() != s2.len()) { return false; } let n = s1.len(); let (mut a, mut b) = (n, n); let (s1, s2) = (s1.as_bytes(), s2.as_bytes()); for i in 0..n { if s1[i] == s2[i] { continue; } if a == n { a = i; // 第一个不同 } else if b == n { b = i; // 第二个不同 } else { return false; // 两个以上不相同 } } if a == n { // 全相同 return true; } if a != n && b == n { // 一个不同 return false; } s1[a] == s2[b] && s1[b] == s2[a] // 不同位置字符相同 } }
- 时间复杂度:O(n)
- 空间复杂度:O(1)
以上就是Java C++ leetcode执行一次字符串交换能否使两个字符串相等的详细内容,更多关于Java C++ 字符串交换相等的资料请关注我们其它相关文章!
赞 (0)