Kimi    LeetCode 3474. 字典序最小的生成字符串 Rust实现 以下是 LeetCode 3474. 字典序最小的生成字符串 的 Rust 实现。题目思路1. 先处理 T 约束对于每个 str1[i] T必须让 word[i..im] str2。直接填充若发生冲突则返回空串。2. 剩余位置填 a为了字典序最小未确定的位置先填 a。3. 再处理 F 约束对于每个 str1[i] F若当前窗口恰好等于 str2则必须修改窗口内某个字符。为保证字典序最小选择最右侧的可修改位置未被 T 固定的位置将其改为与 str2 对应字符不同的最小字符a 变 b否则变 a。若找不到可修改位置返回空串。Rust 代码rustimpl Solution {pub fn generate_string(str1: String, str2: String) - String {let n str1.len();let m str2.len();let sz n m - 1;let s1 str1.as_bytes();let s2 str2.as_bytes();let mut ans vec![0u8; sz];let mut fixed vec![false; sz];// Step 1: 处理所有 T 约束for i in 0..n {if s1[i] bT {for j in 0..m {let pos i j;if fixed[pos] ans[pos] ! s2[j] {return String::new(); // 冲突无解}ans[pos] s2[j];fixed[pos] true;}}}// Step 2: 未填充位置先填 a字典序最小for i in 0..sz {if ans[i] 0 {ans[i] ba;}}// Step 3: 处理所有 F 约束for i in 0..n {if s1[i] bF {// 检查当前窗口是否等于 str2let mut same true;for j in 0..m {if ans[i j] ! s2[j] {same false;break;}}if !same {continue;}// 找最右侧可修改位置let mut found false;for j in (0..m).rev() {let pos i j;if !fixed[pos] {// 改成与 str2[j] 不同的最小字符ans[pos] if s2[j] ba { bb } else { ba };fixed[pos] true; // 修改后固定不再变动found true;break;}}if !found {return String::new(); // 无位置可修改无解}}}String::from_utf8(ans).unwrap()}}复杂度分析- 时间复杂度O(n × m)其中 n ≤ 10⁴, m ≤ 500最坏约 5 × 10⁶ 次操作可接受。- 空间复杂度O(n m)用于存储答案数组和固定标记数组。