这篇文章主要为大家介绍了JavaC++leetcode1790执行一次字符串交换能否使两个字符串相等,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
题目要求
思路:模拟
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++ 字符串交换相等的资料请关注编程学习网其它相关文章!
				 沃梦达教程
				
			本文标题为:Java C++ leetcode执行一次字符串交换能否使两个字符串相等
				
        
 
            
        
             猜你喜欢
        
	     - Java实现顺序表的操作详解 2023-05-19
 - JSP 制作验证码的实例详解 2023-07-30
 - 深入了解Spring的事务传播机制 2023-06-02
 - Springboot整合minio实现文件服务的教程详解 2022-12-03
 - JSP页面间传值问题实例简析 2023-08-03
 - Spring Security权限想要细化到按钮实现示例 2023-03-07
 - Java中的日期时间处理及格式化处理 2023-04-18
 - SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
 - ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
 - 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
 
						
						
						
						
						
				
				
				
				