摘要:2025-05-24:字符串转换后的长度Ⅰ。用go语言,给定一个字符串 s 和一个整数 t,表示需要进行的转换次数。每次转换中,对字符串中每个字符进行如下替换规则:
2025-05-24:字符串转换后的长度Ⅰ。用go语言,给定一个字符串 s 和一个整数 t,表示需要进行的转换次数。每次转换中,对字符串中每个字符进行如下替换规则:
• 若字符是 'z',则用字符串 "ab" 替换它;• 否则,将该字符替换为字母表中下一个字符(例如 'a' 变成 'b','b' 变成 'c',依次类推)。要求计算执行完第 t 次转换后,最终字符串的长度。由于结果可能非常大,需要返回结果对 1000000007 取模的值。
1
s 仅由小写英文字母组成。
1
输入: s = "abcyy", t = 2。
输出: 7。
解释:
第一次转换 (t = 1)
'a' 变为 'b'
'b' 变为 'c'
'c' 变为 'd'
'y' 变为 'z'
'y' 变为 'z'
第一次转换后的字符串为:"bcdzz"
第二次转换 (t = 2)
'b' 变为 'c'
'c' 变为 'd'
'd' 变为 'e'
'z' 变为 "ab"
'z' 变为 "ab"
第二次转换后的字符串为:"cdeabab"
最终字符串长度:字符串为 "cdeabab",长度为 7 个字符。
题目来自力扣3335。
1. 初始化 cnt[26],统计 s 中每个字符的出现次数。2. 预计算 pow2[t + 1],其中 pow2[i] = 2^i % mod。3. 初始化 ans = 0。4. 对于每个字符 c(从 'a' 到 'z'):• 如果 c == 'z':• ans += cnt[25] * pow2[t] % mod。• 否则:• 计算 k = (25 - (c - 'a') + 26) % 26。• 如果 k • ans += cnt[c - 'a'] * pow2[t - k] % mod。• 否则:• ans += cnt[c - 'a'] % mod。5. 返回 ans % mod。const MOD: usize = 1_000_000_007;fn length_after_transformations(s: &str, t: usize) -> usize {let mut cnt = vec![0usize; 26];for ch in s.chars {cnt[(ch as u8 - b'a') as usize] += 1;}for _ in 0..t {let mut nxt = vec![0usize; 26];// 'z' -> "ab"nxt[0] = cnt[25] % MOD;nxt[1] = (cnt[25] + cnt[0]) % MOD;for i in 2..26 {nxt[i] = cnt[i-1] % MOD;}cnt = nxt;}cnt.iter.fold(0, |acc, &x| (acc + x) % MOD)}fn main {let s = "abcyy";let t = 2;let result = length_after_transformations(s, t);println!("{}", result);}来源:稀鸿市