Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π·Π°Π΄Π°ΡΡ β 1790. Check if One String Swap Can Make Strings Equal.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ π
ΠΠ°Π½Ρ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ s1
ΠΈ s2
ΡΠ°Π²Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠ°Π²Π½ΡΠΌΠΈ, ΡΠΎΠ²Π΅ΡΡΠΈΠ² Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΡΠΎΠΊ.
ΠΠ±ΠΌΠ΅Π½ β ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ Π΄Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² ΡΡΡΠΎΠΊΠ΅ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π° ΡΡΠΈΡ
ΠΏΠΎΠ·ΠΈΡΠΈΡΡ
ΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΠ΄Π΅Ρ π
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΠΎΠΈΡΠΊΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ
ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΡΡΠΎΠΊΠ°Ρ
ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ.
- ΠΡΠ»ΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ Π½Π΅Ρ, ΡΡΡΠΎΠΊΠΈ ΡΠΆΠ΅ ΡΠ°Π²Π½Ρ.
- ΠΡΠ»ΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΡΠΎΠ²Π½ΠΎ Π² Π΄Π²ΡΡ
ΠΏΠΎΠ·ΠΈΡΠΈΡΡ
, ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΠΌΠ΅Π½ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
- Π ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ»ΡΡΠ°ΡΡ
(1 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ 2 ΠΎΡΠ»ΠΈΡΠΈΠΉ) ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠ°Π²Π½ΡΠΌΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠΠ΅ΡΠ°Π»ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° π
-
Π‘Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΠΈΡ
ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²:
- ΠΡΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ ΡΡΡΠΎΠΊ ΠΈ ΡΠΎΠ±Π΅ΡΠ΅ΠΌ Π² Π²Π΅ΠΊΡΠΎΡ ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ
ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² s1 ΠΈ s2 ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ.
ΠΡΠΈ ΡΡΠΎΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 3 ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
-
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ»ΡΡΠ°Π΅Π²:
- ΠΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ: ΠΡΠ»ΠΈ Π²Π΅ΠΊΡΠΎΡ ΠΏΡΡΡ, ΡΡΡΠΎΠΊΠΈ ΡΠ°Π²Π½Ρ.
- ΠΠ²Π° ΡΠ°Π·Π»ΠΈΡΠΈΡ: ΠΡΠ»ΠΈ Π² Π²Π΅ΠΊΡΠΎΡΠ΅ ΡΠΎΠ²Π½ΠΎ Π΄Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ: ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π² ΡΡΠΈΡ
ΠΏΠΎΠ·ΠΈΡΠΈΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΡ
(s1[i] == s2[j] ΠΈ s1[j] == s2[i])
- ΠΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ β: ΠΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΈΡ
Π±ΠΎΠ»ΡΡΠ΅ Π΄Π²ΡΡ
, ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΠΌΠ΅Π½ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠΎΠ²Π½ΡΡΡ ΡΡΡΠΎΠΊΠΈ.
ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠ° β‘
- ΠΡΠ΅ΠΌΡ:
O(n)
β ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ
ΠΎΠ΄ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ ΡΡΡΠΎΠΊ.
- ΠΠ°ΠΌΡΡΡ:
O(1)
β Π² Ρ
ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 3 ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
.
ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ π»
impl Solution {
pub fn are_almost_equal(s1: String, s2: String) -> bool {
let n = s1.len();
let s1_bytes = s1.as_bytes();
let s2_bytes = s2.as_bytes();
// Collect up to 3 indices where characters differ.
let mismatch_indices: Vec<_> = (0..n)
.filter(|&i| s1_bytes[i] != s2_bytes[i])
.take(3)
.collect();
match mismatch_indices[..] {
[] => true, // No mismatches: strings are equal.
[i, j] => s1_bytes[i] == s2_bytes[j] && s1_bytes[j] == s2_bytes[i],
_ => false, // 1 mismatch or >2 mismatches: cannot be fixed by one swap.
}
}
}
Tags: #rust #algorithms #strings