Java C++ leetcode執(zhí)行一次字符串交換能否使兩個字符串相等
題目要求


思路:模擬

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); // 不同位置字符相同
}
}
- 時間復(fù)雜度:O(n)
- 空間復(fù)雜度: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]; // 不同位置字符相同
}
};
- 時間復(fù)雜度:O(n)
- 空間復(fù)雜度: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] // 不同位置字符相同
}
}
- 時間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(1)
以上就是Java C++ leetcode執(zhí)行一次字符串交換能否使兩個字符串相等的詳細(xì)內(nèi)容,更多關(guān)于Java C++ 字符串交換相等的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java編程實(shí)現(xiàn)軌跡壓縮算法開放窗口實(shí)例代碼
這篇文章主要介紹了Java編程實(shí)現(xiàn)軌跡壓縮算法開放窗口實(shí)例代碼,具有一定借鑒價值,需要的朋友可以參考下。2017-11-11
Gitlab CI-CD自動化部署SpringBoot項(xiàng)目的方法步驟
本文主要記錄如何通過Gitlab CI/CD自動部署SpringBoot項(xiàng)目jar包。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07
Java編程倒計(jì)時實(shí)現(xiàn)方法示例
這篇文章主要介紹了Java編程倒計(jì)時實(shí)現(xiàn)的三個示例,三種實(shí)現(xiàn)方法,具有一定參考價值,需要的朋友可以了解下。2017-09-09
java讀取文件顯示進(jìn)度條的實(shí)現(xiàn)方法
當(dāng)讀取一個大文件時,一時半會兒無法看到讀取結(jié)果,就需要顯示一個進(jìn)度條,是程序員明白已經(jīng)讀了多少文件,可以估算讀取還需要多少時間,下面的代碼可以實(shí)現(xiàn)這個功能2014-01-01
Spring Cloud 配置中心多環(huán)境配置bootstrap.yml的實(shí)現(xiàn)方法
spring cloud用上了配置中心,就一個boostrap.yml,本文就來介紹一下Spring Cloud 配置中心多環(huán)境配置bootstrap.yml的實(shí)現(xiàn)方法,感興趣的可以了解一下2024-03-03
Springboot整合redis實(shí)現(xiàn)發(fā)布訂閱功能介紹步驟
發(fā)布訂閱作為一種設(shè)計(jì)思想在很多開源組件中都有體現(xiàn),比如大家熟知的消息中間件等,可謂把發(fā)布訂閱這一思想體現(xiàn)的淋漓盡致了2022-09-09

