Compare commits

..
8 Commits
Author SHA1 Message Date
li_chx 551db6decf 72. 编辑距离 2026-08-13 11:16:29 +08:00
li_chx c1fe8fd658 215. 数组中的第K个最大元素 2026-08-13 10:29:17 +08:00
li_chx 23a4622f11 1510. 石子游戏 IV 2026-08-13 10:29:03 +08:00
li_chx ebd3f9445c 1406. 石子游戏 III 2026-08-13 10:28:46 +08:00
li_chx 50fba25511 877. 石子游戏 2026-08-13 10:28:19 +08:00
li_chx ece3af5149 2996. 大于等于顺序前缀和的最小缺失整数 2026-08-13 10:27:10 +08:00
li_chx a19c7573a7 2958. 最多 K 个重复元素的最长子数组 2026-08-13 10:27:08 +08:00
li_chx fe0577dd06 3739. 统计主要元素子数组数目 II 2026-08-12 11:08:31 +08:00
+15 -37
View File
@@ -1,51 +1,29 @@
use crate::arr::make_matrix;
mod arr; mod arr;
struct Solution {} struct Solution {}
impl Solution { impl Solution {
pub fn restore_ip_addresses(s: String) -> Vec<String> { pub fn min_distance(word1: String, word2: String) -> i32 {
let s = s let mut dp = vec![vec![0; word2.len() + 1]; word1.len() + 1];
.chars() let word1 = word1.chars().collect::<Vec<char>>();
.map(|c| (c as u8 - '0' as u8) as i32) let word2 = word2.chars().collect::<Vec<char>>();
.collect::<Vec<_>>(); for i in 1..=word1.len() {
return Self::dfs(&s, 0, [-1; 4], 0); dp[i][0] = dp[i - 1][0] + 1;
} }
fn dfs(s: &Vec<i32>, cur: usize, mut cur_arr: [i32; 4], cur_st: usize) -> Vec<String> { for i in 1..=word2.len() {
if s.len() - cur < 4 - cur_st - if cur_arr[cur_st] == -1 { 0 } else { 1 } dp[0][i] = dp[0][i - 1] + 1;
|| ((4 - cur_st) * 3 - if cur_arr[cur_st] == -1 {0} else {cur_arr[cur_st].to_string().len()} < s.len() - cur)
{
return vec![];
} }
if cur >= s.len() for i in 0..word1.len() {
{ for j in 0..word2.len() {
return vec![cur_arr.map(|t| t.to_string()).join(".")]; dp[i + 1][j + 1] = (dp[i][j] + if word1[i] != word2[j] { 1 } else { 0 })
} .min(dp[i][j + 1] + 1)
if cur_arr[cur_st] == -1 { .min(dp[i + 1][j] + 1);
cur_arr[cur_st] = s[cur];
return Self::dfs(s, cur + 1, cur_arr, cur_st);
}
if cur_arr[cur_st] * 10 + s[cur] <= 255 && cur_arr[cur_st] != 0 {
cur_arr[cur_st] = cur_arr[cur_st] * 10 + s[cur];
let mut arr = Self::dfs(s, cur + 1, cur_arr, cur_st);
if cur_st < 3 {
cur_arr[cur_st] /= 10;
cur_arr[cur_st + 1] = s[cur];
for t in Self::dfs(s,cur + 1, cur_arr, cur_st + 1) {
arr.push(t);
} }
} }
return arr; dp[word1.len()][word2.len()]
}
if cur_st < 3{
cur_arr[cur_st + 1] = s[cur];
return Self::dfs(s, cur + 1, cur_arr, cur_st + 1);
}
vec![]
} }
} }
fn main() { fn main() {
println!( println!(
"{:?}", "{:?}",
Solution::restore_ip_addresses("0000".to_string()) Solution::min_distance("intention".to_string(), "execution".to_string())
); );
} }