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