Open carloscn opened 1 year ago
fn shift(c:char, num:i32) -> char
{
return (c as u8 + num as u8) as char;
}
pub fn replace_digits(s: &str) -> String
{
if s.len() < 1 {
return String::new();
}
let mut sv:Vec<char> = s.chars().collect();
for i in 0..sv.len() {
let c:char;
if i & 1 == 1 {
c = shift(sv[i - 1], sv[i] as i32 - 48);
sv[i] = c;
}
}
return sv.iter().collect();
}
You are given a 0-indexed string s that has lowercase English letters in its even indices and digits in its odd indices.
There is a function shift(c, x), where c is a character and x is a digit, that returns the xth character after c.
For example, shift('a', 5) = 'f' and shift('x', 0) = 'x'. For every odd index i, you want to replace the digit s[i] with shift(s[i-1], s[i]).
Return s after replacing all digits. It is guaranteed that shift(s[i-1], s[i]) will never exceed 'z'.
Example 1:
Input: s = "a1c1e1" Output: "abcdef" Explanation: The digits are replaced as follows:
Example 2:
Input: s = "a1b2c3d4e" Output: "abbdcfdhe" Explanation: The digits are replaced as follows:
Constraints:
1 <= s.length <= 100 s consists only of lowercase English letters and digits. shift(s[i-1], s[i]) <= 'z' for all odd indices i.