carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1844: Replace All Digits with Characters #295

Open carloscn opened 1 year ago

carloscn commented 1 year ago

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.

carloscn commented 1 year ago

Analysis

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();
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/557263 https://github.com/carloscn/structstudy/commit/4206b5c45fd3c669a45d3ae96b0511032d28334a