ΠΠ°Π΄Π°ΡΠ° Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ 2381. Shifting Letters II - ΡΠ΅ΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΠΈΠ΄Π΅Ρ ΠΌΠ½Π΅ Π»ΠΈΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ ΠΈ ΡΠΈΠΌΠΏΠ°ΡΠΈΡΠ½ΠΎΠΉ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ π
ΠΠ°Π½Π° ΡΡΡΠΎΠΊΠ° s
ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ shifts
, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°Π΄Π°ΡΡ Π½Π°ΡΠ°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (Π²ΠΏΠ΅ΡΡΠ΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄).
ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° β ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ ΡΠ΄Π²ΠΈΠ³ΠΈ ΠΊ ΡΡΡΠΎΠΊΠ΅ ΠΈ Π²Π΅ΡΠ½ΡΡΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ΄Π΅Ρ π
ΠΠ»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ
ΡΠ°ΡΡΡΡΠΎΠ² ΡΠ΄Π²ΠΈΠ³ΠΎΠ², ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΡΡ
ΡΡΠΌΠΌΠ°Ρ
. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΊΡΠΌΡΠ»ΡΡΠΈΠ²Π½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΎΡ Π²ΡΠ΅Ρ
ΡΠ΄Π²ΠΈΠ³ΠΎΠ² Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈΡ
ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ
ΠΎΠ΄.
ΠΠ΅ΡΠ°Π»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ π
- Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ²
net_shifts
, Π³Π΄Π΅ Π±ΡΠ΄ΡΡ Ρ
ΡΠ°Π½ΠΈΡΡΡΡ ΡΠΈΡΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΄Π²ΠΈΠ³ΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΡΡΡΠΎΠΊΠ΅.
- ΠΡΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ²
net_shifts
, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π½Π°ΡΠ°Π»Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ Π²ΡΡΠΈΡΠ°Ρ ΠΈΡ
ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ.
- ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡ
ΠΎΠ΄ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅, Π²ΡΡΠΈΡΠ»ΡΡ ΠΊΡΠΌΡΠ»ΡΡΠΈΠ²Π½ΡΠ΅ ΡΠ΄Π²ΠΈΠ³ΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΈΡ
Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°.
ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠ° β³
- ΠΡΠ΅ΠΌΡ:
O(n + m)
, Π³Π΄Π΅ n
β Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ, m
β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
- ΠΠ°ΠΌΡΡΡ:
O(n)
Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° net_shifts
.
ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ π
impl Solution {
pub fn shifting_letters(s: String, shifts: Vec<Vec<i32>>) -> String {
// Track the net shift values for each character in the string
let mut net_shifts = vec![0; s.len()];
for shift in shifts {
let (start, end, direction) = (shift[0] as usize, shift[1] as usize, shift[2]);
let shift_value = if direction == 1 { 1 } else { -1 };
net_shifts[start] += shift_value;
if end + 1 < s.len() {
net_shifts[end + 1] -= shift_value;
}
}
// Apply cumulative shifts and build the resulting string
let mut cumulative_shift = 0;
s.bytes()
.enumerate()
.map(|(i, byte)| {
cumulative_shift = (cumulative_shift + net_shifts[i] + 26) % 26;
let char_index = ((byte - b'a') as i32 + cumulative_shift) % 26;
(b'a' + char_index as u8) as char
})
.collect()
}
}