Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >2023-07-07:给出两个字符串 str1 和 str2。 返回同时以 str1 和 str2 作为子序列的最短字符串。 如

2023-07-07:给出两个字符串 str1 和 str2。 返回同时以 str1 和 str2 作为子序列的最短字符串。 如

作者头像
福大大架构师每日一题
发布于 2023-07-25 08:45:25
发布于 2023-07-25 08:45:25
19000
代码可运行
举报
运行总次数:0
代码可运行

2023-07-07:给出两个字符串 str1 和 str2。

返回同时以 str1 和 str2 作为子序列的最短字符串。

如果答案不止一个,则可以返回满足条件的任意一个答案。

输入:str1 = "abac", str2 = "cab"。

输出:"cabac"。

答案2023-07-07:

大体步骤如下:

1.初始化字符串 str1str2 分别为 "abac" 和 "cab"。

2.创建一个二维数组 dp,其大小为 (n+1) x (m+1),其中 nstr1 的长度,mstr2 的长度。

3.使用动态规划来填充 dp 数组。循环遍历 i 从 1 到 n,以及 j 从 1 到 m

4.在每个循环中,比较 str1[i-1]str2[j-1] 的值:

  • • 如果它们相等,更新 dp[i][j]dp[i-1][j-1] + 1,表示当前字符能够在最短公共超序列中出现。
  • • 否则,取 dp[i-1][j]dp[i][j-1] 中的较大值,表示当前字符不能同时出现在最短公共超序列中,需要从其中一个字符串中选择。

5.创建一个长度为 n + m - dp[n][m] 的字符数组 ans,用于存储最短公共超序列。

6.初始化变量 ansilen(ans) - 1injm

7.通过回溯 dp 数组,从右下角开始往左上角移动,直到 ij 达到边界 0。

8.如果 dp[i][j] 等于 dp[i-1][j-1] + 1str1[i-1] 等于 str2[j-1],表示当前字符是在 str1str2 的最短公共超序列中,将其存入 ans 中并将 ansi 减一,同时将 ij 减一。

9.如果 dp[i][j] 等于 dp[i-1][j],表示当前字符只出现在 str1 中,将其存入 ans 中并将 ansi 减一,同时将 i 减一。

10.如果 dp[i][j] 等于 dp[i][j-1],表示当前字符只出现在 str2 中,将其存入 ans 中并将 ansi 减一,同时将 j 减一。

11.当完成回溯后,若 i 大于 0,将 str1 中剩余的字符存入 ans 中。

12.当完成回溯后,若 j 大于 0,将 str2 中剩余的字符存入 ans 中。

13.将 ans 转换为字符串,并作为结果返回。

14.在 main 函数中调用 shortestCommonSupersequence 函数,并输出结果 "cabac"。

时间复杂度:O(nm),其中 n 是字符串 str1 的长度,m 是字符串 str2 的长度。

空间复杂度:O(nm),需要使用一个二维数组 dp 来存储中间结果。

这是使用动态规划(Dynamic Programming)解决字符串相关问题的算法。具体来说,这个算法用于找到两个字符串的最短公共超序列(Shortest Common Supersequence)。最短公共超序列是指包含两个字符串的所有字符,并且是长度最短的序列。通过使用动态规划的方法,可以利用子问题的最优解来构建整体的最优解,从而高效地解决这个问题。

go完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    "fmt"
)

func shortestCommonSupersequence(str1 string, str2 string) string {
    n := len(str1)
    m := len(str2)
    dp := make([][]int, n+1)
    for i := range dp {
        dp[i] = make([]int, m+1)
    }
    for i := 1; i <= n; i++ {
        for j := 1; j <= m; j++ {
            dp[i][j] = max(dp[i-1][j], dp[i][j-1])
            if str1[i-1] == str2[j-1] {
                dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1)
            }
        }
    }
    ans := make([]byte, n+m-dp[n][m])
    ansi := len(ans) - 1
    i := n
    j := m
    for i > 0 && j > 0 {
        if dp[i][j] == dp[i-1][j-1]+1 && str1[i-1] == str2[j-1] {
            ans[ansi] = str1[i-1]
            ansi--
            i--
            j--
        } else if dp[i][j] == dp[i-1][j] {
            ans[ansi] = str1[i-1]
            ansi--
            i--
        } else {
            ans[ansi] = str2[j-1]
            ansi--
            j--
        }
    }
    for ; i > 0; i-- {
        ans[ansi] = str1[i-1]
        ansi--
    }
    for ; j > 0; j-- {
        ans[ansi] = str2[j-1]
        ansi--
    }
    return string(ans)
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func main() {
    str1 := "abac"
    str2 := "cab"
    result := shortestCommonSupersequence(str1, str2)
    fmt.Println(result)
}

在这里插入图片描述

rust完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fn shortest_common_supersequence(str1: &str, str2: &str) -> String {
    let s1: Vec<char> = str1.chars().collect();
    let s2: Vec<char> = str2.chars().collect();
    let n = s1.len();
    let m = s2.len();
    let mut dp = vec![vec![0 as i32; m + 1]; n + 1];

    let mut i = 1;

    while i <= n {
        let mut j = 1;
        while j <= m {
            dp[i][j] = dp[i - 1][j].max(dp[i][j - 1]);
            if s1[i - 1] == s2[j - 1] {
                dp[i][j] = dp[i][j].max(dp[i - 1][j - 1] + 1);
            }
            j += 1;
        }
        i += 1;
    }

    let ans_length = n + m - dp[n][m] as usize;
    let mut ans = vec![' '; ans_length];
    let mut ansi = ans_length as i32 - 1;
    let (mut i, mut j) = (n, m);

    while i > 0 && j > 0 {
        if dp[i][j] == dp[i - 1][j - 1] + 1 && str1.chars().nth(i - 1) == str2.chars().nth(j - 1) {
            ans[ansi as usize] = str1.chars().nth(i - 1).unwrap();
            ansi -= 1;
            i -= 1;
            j -= 1;
        } else if dp[i][j] == dp[i - 1][j] {
            ans[ansi as usize] = str1.chars().nth(i - 1).unwrap();
            ansi -= 1;
            i -= 1;
        } else {
            ans[ansi as usize] = str2.chars().nth(j - 1).unwrap();
            ansi -= 1;
            j -= 1;
        }
    }

    while i > 0 {
        ans[ansi as usize] = str1.chars().nth(i - 1).unwrap();
        ansi -= 1;
        i -= 1;
    }

    while j > 0 {
        ans[ansi as usize] = str2.chars().nth(j - 1).unwrap();
        ansi -= 1;
        j -= 1;
    }

    ans.iter().collect()
}

fn main() {
    let str1 = String::from("abac");
    let str2 = String::from("cab");

    let result = shortest_common_supersequence(&str1, &str2);
    println!("{}", result);
}

在这里插入图片描述

c++完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <vector>
#include <string>

using namespace std;

string shortestCommonSupersequence(string str1, string str2) {
    int n = str1.size();
    int m = str2.size();
    vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
            if (str1[i - 1] == str2[j - 1]) {
                dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);
            }
        }
    }

    string ans;
    int i = n;
    int j = m;

    while (i > 0 && j > 0) {
        if (dp[i][j] == dp[i - 1][j - 1] + 1 && str1[i - 1] == str2[j - 1]) {
            ans = str1[i - 1] + ans;
            i--;
            j--;
        }
        else if (dp[i][j] == dp[i - 1][j]) {
            ans = str1[i - 1] + ans;
            i--;
        }
        else {
            ans = str2[j - 1] + ans;
            j--;
        }
    }

    while (i > 0) {
        ans = str1[i - 1] + ans;
        i--;
    }

    while (j > 0) {
        ans = str2[j - 1] + ans;
        j--;
    }

    return ans;
}

int main() {
    string str1 = "abac";
    string str2 = "cab";

    string result = shortestCommonSupersequence(str1, str2);
    cout << result << endl;

    return 0;
}

在这里插入图片描述

c完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* shortestCommonSupersequence(char* str1, char* str2) {
    int n = strlen(str1);
    int m = strlen(str2);
    int** dp = (int**)malloc((n + 1) * sizeof(int*));
    for (int i = 0; i <= n; i++) {
        dp[i] = (int*)malloc((m + 1) * sizeof(int));
        memset(dp[i], 0, (m + 1) * sizeof(int));
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            dp[i][j] = (dp[i - 1][j] > dp[i][j - 1]) ? dp[i - 1][j] : dp[i][j - 1];
            if (str1[i - 1] == str2[j - 1]) {
                dp[i][j] = (dp[i][j] > dp[i - 1][j - 1] + 1) ? dp[i][j] : dp[i - 1][j - 1] + 1;
            }
        }
    }

    int len = n + m - dp[n][m];
    char* ans = (char*)malloc((len + 1) * sizeof(char));
    ans[len] = '\0';
    int ansi = len - 1;
    int i = n;
    int j = m;

    while (i > 0 && j > 0) {
        if (dp[i][j] == dp[i - 1][j - 1] + 1 && str1[i - 1] == str2[j - 1]) {
            ans[ansi--] = str1[i - 1];
            i--;
            j--;
        }
        else if (dp[i][j] == dp[i - 1][j]) {
            ans[ansi--] = str1[i - 1];
            i--;
        }
        else {
            ans[ansi--] = str2[j - 1];
            j--;
        }
    }

    for (; i > 0; i--) {
        ans[ansi--] = str1[i - 1];
    }
    for (; j > 0; j--) {
        ans[ansi--] = str2[j - 1];
    }

    for (int i = 0; i <= n; i++) {
        free(dp[i]);
    }
    free(dp);

    return ans;
}

int main() {
    char str1[] = "abac";
    char str2[] = "cab";

    char* result = shortestCommonSupersequence(str1, str2);
    printf("%s\n", result);

    free(result);
    return 0;
}

在这里插入图片描述

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,
2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,要对每个 wordsQuery[i] 找到一个与其有最长公共后缀的字符串。如果有多个字符串与 wordsQuery[i] 有相同的最长公共后缀,则返回在 wordsContainer 中最早出现的那个。最后,返回一个整数数组 ans,其中 ans[i] 表示与 wordsQuery[i] 有最长公共后缀的字符串在 wordsContainer 中的下标。
福大大架构师每日一题
2024/10/29
790
2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,
2021-04-03:给定两个字符串str1和str2,想把str2整体插入到str1中的某个
2021-04-03:给定两个字符串str1和str2,想把str2整体插入到str1中的某个位置,形成最大的字典序,返回字典序最大的结果。
福大大架构师每日一题
2021/04/03
5370
2021-04-03:给定两个字符串str1和str2,想把str2整体插入到str1中的某个
2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列 比如输入字符串为 “PAYPALISHIRI
2.如果 numRows 等于 1 或者 numRows 大于等于 n,则返回原始字符串 s。
福大大架构师每日一题
2023/04/28
5230
2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列 比如输入字符串为 “PAYPALISHIRI
搞定大厂算法面试之leetcode精讲20.字符串
方法1.截取字符串,循环字符串,遇到#就截掉最后一个字符,循环完毕之后,最后比较两个去除掉#退格之后的字符串是否相等,时间复杂度O(m+n),m、n是两个字符串的长度。空间复杂度O(1)
全栈潇晨
2021/12/04
7080
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数, 你
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数,
福大大架构师每日一题
2023/08/29
1730
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数,  你
2023-05-15:对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次, 能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相
2023-05-15:对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次,
福大大架构师每日一题
2023/05/15
6080
2023-05-15:对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次, 能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数 因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。 字符串的 子序
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。字符串的 子序列 是经由原字符串删除一些(也可能不删除)字符但不改变剩余字符相对位置的一个新字符串。输入: s = "abc"。输出: 7。答案2022-10-01:dp0~25,保存26个字母结尾的子序列个数。时间复杂度:O(N)。空间复杂度:O(1)。代码用rust编写。代码如下:use std::collections::HashMap;fn main() {
福大大架构师每日一题
2022/10/01
5310
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数 因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。 字符串的 子序
两个字符串算法
这部分主要使用了动态规划的技术,就是如果两个最大公共子序列相等的话,必然前面的也相等
哒呵呵
2018/08/06
4130
2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组
2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的,
福大大架构师每日一题
2023/04/13
4900
2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组
2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两个 相邻 的字符,并将它们交换。 请你返回将 s 变成回文
1.定义结构体 IndexTree,其中包含一个整型切片 tree 和整型变量 n,用于实现树状数组。
福大大架构师每日一题
2023/05/27
3740
2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返
2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返回false。 来自字节飞书团队。 答案2022-05-12: 欠债表。滑动窗口,str2存map。 代码用rust编写。代码如下: fn main() { let ans=check2("fabkbbca","abcb"); println!("ans = {}",ans); } fn check2( s1:&str, s2:&
福大大架构师每日一题
2022/05/12
3800
2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返
2022-12-04:给定一个由 ‘[‘ ,‘]‘,‘(‘,‘)’ 组成的字符串, 请问最少插入多少个括号就能使这个字符串的所有括号左右配对, 例如当前串是 “
2022-12-04:给定一个由 '' ,'','(',‘)’ 组成的字符串,请问最少插入多少个括号就能使这个字符串的所有括号左右配对,例如当前串是 "([[])",那么插入一个']'即可满足。输出最少插入多少个括号。答案2022-12-04:递归。很多人会想到栈,在这里行不通的。可能性1,先搞定l+1...r,然后搞定l。可能性2,先搞定l...r-1,然后搞定r。可能性3,sl和sr天然匹配,需要搞定的就是l+1..r-1。递归这三种可能性取最小值即可。代码用rust编写。代码如下:use std::{
福大大架构师每日一题
2022/12/04
4960
2022-12-04:给定一个由 ‘[‘ ,‘]‘,‘(‘,‘)’ 组成的字符串, 请问最少插入多少个括号就能使这个字符串的所有括号左右配对, 例如当前串是 “
2022-05-12:小歪每次会给你两个字符串:笔记s1和关键词s2,请你写一个函数,判断s2的排列之一是否是s1的子串。
[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_03_2_week/Code02_StringCheck.java)
福大大架构师每日一题
2022/06/04
1930
2022-05-12:小歪每次会给你两个字符串:笔记s1和关键词s2,请你写一个函数,判断s2的排列之一是否是s1的子串。
2021-02-11:如何求出两个字符串的最大公共子序列长度?
举例:"moonfudadayx"和"mfyudadxxax",最大公共子序列是"mfudadax",长度是8。
福大大架构师每日一题
2021/02/11
6800
2021-02-11:如何求出两个字符串的最大公共子序列长度?
2021-02-10:如何求出两个字符串的最大公共子串长度?
2021-02-10:如何求出两个字符串的最大公共子串长度? 福哥答案2021-02-10: 自然智慧即可。 1.动态规划。时间复杂度是O(MN),空间复杂度是O(MN)。有代码。 dpi只依赖左上边。 ①.如果str1i==str2j,dpi=【左上边】+1。 ②.如果str1i==str2j,dpi=0。 2.dp压缩的动态规划。时间复杂度是O(M*N),空间复杂度是O(1)。有代码。 3.后缀数组。时间复杂度是O(M+N)。无代码。 代码用golang编写,代码如下: package main im
福大大架构师每日一题
2021/02/10
1K0
2021-02-10:如何求出两个字符串的最大公共子串长度?
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串?
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串? 比如 s1 = "abcde",s2 = "axbc"。
福大大架构师每日一题
2021/06/11
3470
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串?
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k如果满足下述条件,则可以将字符串 t 视作是 理想字符串 :t 是字符串 s 的一个子序列。t 中每两个 相邻 字母在字母表中位次的绝对差值小于或等于 k 。返回 最长 理想字符串的长度。字符串的子序列同样是一个字符串,并且子序列还满足:可以经由其他字符串删除某些字符(也可以不删除)但不改变剩余字符的顺序得到。注意:字母表顺序不会循环例如,'a' 和 'z' 在字母表中位次的绝对差值是 25,而不是 1 。答案2022-12-10:二
福大大架构师每日一题
2022/12/10
6400
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个最短子串,能包含str2的所有字符,字符顺序无所谓,str1的这个最短子串也可以包含多余的字符。返回这个最短包含子串。
福大大架构师每日一题
2021/08/30
9290
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个
2023-03-22:给定一个字符串str, 如果删掉连续一段子串,剩下的字符串拼接起来是回文串, 那么该删除叫做有效的删除。 返回有多少种有效删除。 注意 :
首先,我们来看如何判断一个字符串是否是回文串。我们可以使用双指针法,即左右指针分别指向字符串的头部和尾部,然后向中间扫描,逐个比较对应位置上的字符。若对应位置上的字符不相等,则该字符串不是回文串;否则,该字符串是回文串。
福大大架构师每日一题
2023/03/22
6260
2023-03-22:给定一个字符串str, 如果删掉连续一段子串,剩下的字符串拼接起来是回文串, 那么该删除叫做有效的删除。 返回有多少种有效删除。 注意 :
2021-02-12:如何判断两个字符串是否互为旋转字符串?
假设字符串str1是“ABCDE”,字符串str2是“CDEAB”。字符串str2可以拆分成“CDE”和“AB”,可以拼成“ABCDE”。所以str1和str2互为旋转字符串。
福大大架构师每日一题
2021/02/12
5510
2021-02-12:如何判断两个字符串是否互为旋转字符串?
推荐阅读
2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,
790
2021-04-03:给定两个字符串str1和str2,想把str2整体插入到str1中的某个
5370
2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列 比如输入字符串为 “PAYPALISHIRI
5230
搞定大厂算法面试之leetcode精讲20.字符串
7080
2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数, 你
1730
2023-05-15:对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次, 能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相
6080
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数 因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。 字符串的 子序
5310
两个字符串算法
4130
2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组
4900
2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两个 相邻 的字符,并将它们交换。 请你返回将 s 变成回文
3740
2022-05-12:小歪每次会给你两个字符串: 笔记s1和关键词s2,请你写一个函数, 判断s2的排列之一是否是s1的子串。 如果是,返回true; 否则,返
3800
2022-12-04:给定一个由 ‘[‘ ,‘]‘,‘(‘,‘)’ 组成的字符串, 请问最少插入多少个括号就能使这个字符串的所有括号左右配对, 例如当前串是 “
4960
2022-05-12:小歪每次会给你两个字符串:笔记s1和关键词s2,请你写一个函数,判断s2的排列之一是否是s1的子串。
1930
2021-02-11:如何求出两个字符串的最大公共子序列长度?
6800
2021-02-10:如何求出两个字符串的最大公共子串长度?
1K0
2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串?
3470
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
6400
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个
9290
2023-03-22:给定一个字符串str, 如果删掉连续一段子串,剩下的字符串拼接起来是回文串, 那么该删除叫做有效的删除。 返回有多少种有效删除。 注意 :
6260
2021-02-12:如何判断两个字符串是否互为旋转字符串?
5510
相关推荐
2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验