Java C++ leetcode执行一次字符串交换能否使两个字符串相等

 更新时间:2022年10月11日 17:04:58   作者:AnjaVon  
这篇文章主要为大家介绍了Java C++ 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之如何截取视频第一帧

    Java之如何截取视频第一帧

    这篇文章主要介绍了Java之如何截取视频第一帧问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java编程实现轨迹压缩算法开放窗口实例代码

    Java编程实现轨迹压缩算法开放窗口实例代码

    这篇文章主要介绍了Java编程实现轨迹压缩算法开放窗口实例代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • Gitlab CI-CD自动化部署SpringBoot项目的方法步骤

    Gitlab CI-CD自动化部署SpringBoot项目的方法步骤

    本文主要记录如何通过Gitlab CI/CD自动部署SpringBoot项目jar包。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • Java编程倒计时实现方法示例

    Java编程倒计时实现方法示例

    这篇文章主要介绍了Java编程倒计时实现的三个示例,三种实现方法,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • 一定要让你搞懂Java位运算符

    一定要让你搞懂Java位运算符

    这篇文章主要为大家介绍了Java位运算符,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • java读取文件显示进度条的实现方法

    java读取文件显示进度条的实现方法

    当读取一个大文件时,一时半会儿无法看到读取结果,就需要显示一个进度条,是程序员明白已经读了多少文件,可以估算读取还需要多少时间,下面的代码可以实现这个功能
    2014-01-01
  • 详解Java JDK动态代理

    详解Java JDK动态代理

    这篇文章主要介绍了Java JDK动态代理的相关资料,帮助大家更好的理解和学习Java 代理的有关知识,感兴趣的朋友可以了解下
    2020-08-08
  • Spring Cloud 配置中心多环境配置bootstrap.yml的实现方法

    Spring Cloud 配置中心多环境配置bootstrap.yml的实现方法

    spring cloud用上了配置中心,就一个boostrap.yml,本文就来介绍一下Spring Cloud 配置中心多环境配置bootstrap.yml的实现方法,感兴趣的可以了解一下
    2024-03-03
  • Java中断异常的正确处理方法

    Java中断异常的正确处理方法

    这篇文章主要给大家介绍了关于Java中断异常的正确处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Springboot整合redis实现发布订阅功能介绍步骤

    Springboot整合redis实现发布订阅功能介绍步骤

    发布订阅作为一种设计思想在很多开源组件中都有体现,比如大家熟知的消息中间件等,可谓把发布订阅这一思想体现的淋漓尽致了
    2022-09-09

最新评论