首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C中打印最长公用子字符串的代码

在C语言中打印最长公共子字符串的代码可以使用动态规划算法来实现。下面是一个示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <string.h>

void printLongestCommonSubstring(char* str1, char* str2) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);

    int maxLength = 0;  // 最长公共子串的长度
    int endIndex = 0;   // 最长公共子串的结束索引

    int dp[len1 + 1][len2 + 1];  // 动态规划表格
    memset(dp, 0, sizeof(dp));

    for (int i = 1; i <= len1; i++) {
        for (int j = 1; j <= len2; j++) {
            if (str1[i - 1] == str2[j - 1]) {
                dp[i][j] = dp[i - 1][j - 1] + 1;
                if (dp[i][j] > maxLength) {
                    maxLength = dp[i][j];
                    endIndex = i - 1;  // 更新最长公共子串的结束索引
                }
            }
        }
    }

    if (maxLength == 0) {
        printf("No common substring found.\n");
        return;
    }

    printf("Longest common substring: ");
    for (int i = endIndex - maxLength + 1; i <= endIndex; i++) {
        printf("%c", str1[i]);
    }
    printf("\n");
}

int main() {
    char str1[] = "abcdefg";
    char str2[] = "defghij";

    printLongestCommonSubstring(str1, str2);

    return 0;
}

这段代码使用了一个二维数组 dp 来记录最长公共子串的长度。通过两层循环遍历两个字符串的所有字符,如果当前字符相等,则将 dp[i][j] 设置为前一个字符的最长公共子串长度加1。同时,如果当前的最长公共子串长度大于之前记录的最大长度,就更新最大长度和最长公共子串的结束索引。

最后,根据最长公共子串的结束索引和最大长度,打印出最长公共子串。

请注意,这段代码只是一个示例,实际应用中可能需要根据具体需求进行修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java练习—-》求字符串最长回文

(^U^)ノ~YO 一,题目 求一串字符串最长回文串,这里以cabacabae为例 二,思路图形解析 第一步:观察这串字符串—》 第二步:找出最长回文串,并设数—》 说明...(不想改图了,那个resLength长度是动态,因为在这之前我们是不知道最长回文,但是我们可以假设,上面图没有交代,哈哈哈额) 代码 所以,根据上面的分析,我们如果限定了maxRigth和j位置...因为maxRigth和j范围不同,其他也会不同,所以有以下代码—-》 重点部分分析:假设我们知道了最长回文串,那么resCenter则确定了,resLength也就确定了,同样maxRigth...那么没确定之前,我们可以观察到待定最长回文,resCenter变化和j变化是一样,那我们可以用j来表示,其实resCenter 向后走时候,也就是j。...最左边界为j-c[j],肯定要大于等于0;最右边界为j+c[j]【这里数组c[j]表示是b[i]为中心回文半径】,就要小于length,同时因为整个字符数组都左右最后一个元素都是“#”

89320

Java字符串查找匹配字符串

示例: 字符串“You may be out of my sight, but never out of my mind.”查找“my”个数。...方法1:通过StringindexOf方法 public int indexOf(int ch, int fromIndex) :返回在此字符串第一次出现指定字符处索引,从指定索引开始搜索。...该方法作用就像是使用给定表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组不包括结尾空字符串。...: import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 字符串查找匹配字符串...} System.out.println("匹配个数为" + count); //结果输出 } //方法3、通过split方法,但此方法需考虑字符串是否是末尾,若在末尾则不需要

7.1K20
  • 字符串找出连续最长数字串(算法)

    描述 输入一个字符串,返回其最长数字串,以及其长度。若有多个最长数字串,则将它们全部输出(按原字符串相对位置) 本题含有多组样例输入。...数据范围:字符串长度 1 \le n \le 200 \1≤n≤200 , 保证每组输入都至少含有一个数字 输入描述: 输入一个字符串。...1<=len(字符串)<=200 输出描述: 输出字符串最长数字字符串和它长度,中间用逗号间隔。如果有相同长度串,则要一块儿输出(中间不要输出空格)。 思路: 1、首选获取到最长数字是多少。...a8a72a6a5yy98y65ee1r2 复制 输出: 123058789,9 729865,2 复制 说明: 样例一最长数字串为...123058789,长度为9 样例二最长数字串有72,98,65,长度都为2 */ public static void main(String[] args) {

    96920

    如何找到字符串最长回文串?

    题目:给你一个字符串,找出里面最长回文串。 例如 输入abcdcef,那么输出应该是cdc 输入adaelele,输出应该是elele ? ? ? ? ? 半分钟过去了。 ? ? ?...小史:可以遍历整个字符串,把每个字符和字符间空隙当作回文中心,然后向两边扩展来找到最长回文串。 小史这次抢着分析时间和空间复杂度。 ? ? ? 一分钟过去了。 ? ? ? ?...1、首先,我们要记录下目前已知回文串能够覆盖到最右边地方,就像案例第8位 2、同时,覆盖到最右边回文串所对应回文中心也要记录,就像案例第5位 3、以每一位为中心回文串长度也要记录,...小史: 1、先对字符串进行预处理,两个字符之间加上特殊符号# 2、然后遍历整个字符串,用一个数组来记录以该字符为中心回文长度,为了方便计算右边界,我在数组记录长度一半(向下取整) 3、每一次遍历时候...当然,如果第3步该字符没有最右边界“羽翼”下,则直接进行中心扩展探索。进行中心扩展探索时候,同时又更新右边界 5、最后得到最长回文之后,去掉其中特殊符号即可 ? ?

    91510

    删除字符串串(C++ regex求解)

    本文链接:https://blog.csdn.net/weixin_42449444/article/details/95351389 题目描述: 输入2个字符串S1和S2,要求删除字符串S1出现所有串...输入格式: 输入2行中分别给出不超过80个字符长度、以回车结束2个非空字符串,对应S1和S2。 输出格式: 一行输出删除字符串S1出现所有串S2后结果字符串。...输入样例: Tomcat is a male ccatat cat 输出样例: Tom is a male 解题思路: 删除字符串s1出现所有串s2当然是无脑用正则表达式求解啊。...额 本菜鸡之前有写过一篇关于C++正则表达式博文:浅谈C++regex库。...在这里还是简单介绍一下这道题涉及到俩个函数:①regex_search:搜索匹配,根据正则表达式来搜索字符串是否存在符合规则字符串;②regex_replace:替换匹配,可以将符合匹配规则字符串替换为其他字符串

    3.4K40

    javascript如何将字符串转成变量或可执行代码

    有这样一个需求:当前作用域内有未知一些变量,其中一个函数可以拿到某个变量名字符串,怎么能在函数内通过传进来字符串取到作用域链变量值,示例小 demo 如下: const name = '周小黑...' const age = 18 /** * @param {String} e 变量名字符串 * @returns value 通过变量名字符串作用域链取到变量值 */ function...return value } const str = fn('name') 要解决上面的问题,主要就是怎么将字符串转变成可执行代码?...主要有三种方式: eval() 函数 eval() 函数会将传入字符串当做 JavaScript 代码进行执行,所以下面的字符串可以正确取到变量对应值,eval 对比 new Function 和...setTimeout 定时器 setTimeout 第一个参数我们平时都是传一个函数,它其实也是可以传字符串进去浏览器是可以正常执行node环境中会报错。

    58430

    Lua实现对UE4 C++代码自动补全

    本文介绍了Emmylua插件支持下,如何获取到UE4反射信息,并如何生成Emmylua格式Lua注释代码来支持自动补全和跳转。...我们项目接入是slua-unreal,可以提供UE4进行Lua开发基础支持。 不过,如何能够保证UE4进行Lua开发效率?Lua能够像C++或者C#一样支持代码补全和跳转吗?...Emmylua 1.2.2版本,提供了一个功能,可以识别C#dll,并生成对应lua类型注释。它原理并不难,就是利用C#反射功能,读取dll反射信息,并生成对应lua注释文件。...如果类型是一个模板,那么会将模板类型字符串赋值给ExtendedTypeText来返回。...Emmylua生成C#代码Lua文件做法,是直接在C#代码写死格式。

    6.2K32

    C++ 无序字符串查找所有重复字符【两种方法】

    参考链接: C++程序,找出一个字符ASCII值 C++ 无序字符串查找所有重复字符   Example:给定字符串“ABCDBGAC”,打印“A B C”  #include <iostream...    string s = a;     for (int i = 0; i < s.size() - 1; i++)     {         if (s[i] == '#') //判断i指针指向是否为输出过字符...            continue;         int m = 1; //判断j指针指向是否为输出过字符         for (int j = i + 1; j <= s.size...                if (m == 1)                     cout << s[i] << " ";                 s[j] = '#'; //对输出过字符做标记...                m = 0;      //对输出过字符做标记             }         }     } } void PrintIterateChar2(const

    3.8K30

    前端学数据结构与算法(八): 单词前缀匹配神器-Trie树实现及其应用

    而它这种高效正是建立算法以空间换时间思想上,因为字符串每一个字符都会成为一个树节点,例如我们把这样一组单词['bag', 'and', 'banana', 'ban', 'am', 'board...720 - 词典中最长单词 ↓ 给出一个字符串数组words组成一本英语词典。从中找出最长一个单词, 该单词是由words词典其他单词逐步添加一个字母组成。...若其中有多个可行答案, 则返回答案字典序最小单词。若无答案,则返回空字符串。...) return res }; 648 - 单词替换 ↓ 英语,我们有一个叫做 词根(root)概念,它可以跟着其他一些词组成另一个较长单词—— 我们称这个词为 继承词(successor...因为...我们来总结下这种数据结构优缺点: **优点** 性能高效,从任意多字符串匹配某一个单词时间复杂度,最多仅为该单词长度而已。

    85811

    序列比对(24)最长公共序列

    本文介绍如何求解两个字符串最长公共序列。 最长公共序列问题 前文《序列比对(23)最长公共字符串》介绍了如何求解两个字符串最长公共字符串,本文将介绍如何求解两个字符串最长公共序列。...二者听起来很像,所以我们首先得说明一下字符串序列区别。 ?...与最长公共字符串问题类似,最长公共序列问题也是一种序列比对问题,可以用动态规划解决,只是迭代时允许插入和缺失,而不允许错配而已。如果是匹配,得分为1,否则得分为0。其迭代公式如下: ?...动态规划求解最长公共序列代码 具体代码如下: #include #include #include #define MAXSEQ 1000..., s[is[k] - 1]); printf("\n"); for (k = n - 1; k >= 0; k--) printf("%c",

    53810

    字符串:KMP算法还能干这个!

    (或者字符串 "abcabc" 重复两次构成。) 思路 这又是一道标准KMP题目。 我们字符串:都来看看KMP看家本领!里提到了,一个串查找是否出现过另一个串,这是KMP看家本领。...这里介绍了什么是前缀,什么是后缀,什么又是最长相同前后缀), 如果 next[len - 1] != -1,则说明字符串最长相同前后缀(就是字符串前缀串和后缀串相同最长长度)。...(len - (next[len - 1] + 1)) 也就是:12(字符串长度) - 8(最长公共前后缀长度) = 4, 4正好可以被 12(字符串长度) 整除,所以说明有重复字符串(asdf...代码如下: C++代码 class Solution { public: // KMP里标准构建next数组过程 void getNext (int* next, const string...又给出了详细讲解。 留言区留下你思路吧! -------end------- 我是程序员Carl,哈工大师兄,先后腾讯和百度从事技术研发多年,利用工作之余重刷leetcode。

    58240

    文心一言 VS 讯飞星火 VS chatgpt (206)-- 算法导论15.4 3题

    在这个示例,lcsLength 函数计算两个字符串最长公共序列长度,并且使用一个二维数组 memo 来存储问题解,其中 memo[i][j] 存储是 str1 前 i 个字符和 str2...如果不同,则最长公共序列长度是去掉 str1 第 i 个字符后最长公共序列和去掉 str2 第 j 个字符后最长公共序列较大值,即 memo[i][j] = max(memo[i-1...在下面给出Go语言代码,我们将计算两个字符串str1和str2最长公共序列长度。...递归函数会在每次需要计算相同问题时,检查是否已经dp存储了结果,以避免重复计算。 main函数给出了一个例子,计算字符串"ABCBDAB"和"BDCAB"最长公共序列长度,并打印结果。...混元,代码正常运行: 带备忘 LCS-LENGTH 算法是一种动态规划方法,用于计算两个字符串最长公共序列长度。

    15120

    LCS 算法:Javascript 最长公共序列

    X和Y取出尽可能多一部分字符,按照它们原序列排列先后次序排列得到。...LCS问题算法用途广泛,如在软件不同版本管理,用LCS算法找到新旧版本异同处;软件测试,用LCS算法对录制和回放序列进行比较,基因工程领域,用LCS算法检查患者DNA连与键康DNA链异同...;防抄袭系统,用LCS算法检查论文抄袭率。...但Z不是X和Y最长公共序列,而序列[B,C,B,A]和[B,D,A,B]也均为X和Y最长公共序列,长度为4,而X和Y不存在长度大于等于5公共序列。...对于序列[A,B,C]和序列[E,F,G]公共序列只有空序列[]。 3、最长公共序列:给定序列X和Y,从它们所有公共序列中选出长度最长那一个或几个。

    2.3K101

    KMP算法还能干这个

    (或者字符串 "abcabc" 重复两次构成。) 思路 这又是一道标准KMP题目。 我们字符串:KMP算法精讲里提到了,一个串查找是否出现过另一个串,这是KMP看家本领。...= -1,则说明字符串最长相同前后缀(就是字符串前缀串和后缀串相同最长长度)。 最长相等前后缀长度为:next[len - 1] + 1。 数组长度为:len。...459.重复字符串_1 next[len - 1] = 7,next[len - 1] + 1 = 8,8就是此时字符串asdfasdfasdf最长相同前后缀长度。...(len - (next[len - 1] + 1)) 也就是:12(字符串长度) - 8(最长公共前后缀长度) = 4, 4正好可以被 12(字符串长度) 整除,所以说明有重复字符串(asdf...针对这些问题,我字符串:KMP算法精讲给出了详细讲解。

    44420

    python 面试题-收集100+面试题笔试题

    输出指定字符串A字符串B第一次出现位置,如果B不包含A,则输出-1 从 0 开始计数 A = “hello” B = “hi how are you hello world, hello yoyo...文本每行中长度超过3单词 以下文本找出 每行中长度超过3单词: Call me Ishmael....’ 移除 比如’aababbc’ 移除里面的ab后得到abc 需继续移除ab,得到c,直到字符串不会出现连续ab 5.9看代码得结果(join用法) x=”abc”,y=”def”,z=[“d”,”...例如:“hello”就包含重复字符‘l’,而“world”就不包含重复字符, 有重复打印True, 没重复打印False 5.20 找出一个字符串中子串不含有重复字符最长子串(串) 给定一个字符串,...示例3: 输入: “ pwwkew” 输出: 3 解释:因为无重复字符最长子串是”wke”‘, 所以其长度为3。 请注意,你答案必须是长度,”pwke”是一个序列,不是串。

    6.7K20

    Python-求解两个字符串最长公共

    则这两个字符串最长公共序列长度为4,最长公共序列是:BCBA 二、算法求解 这是一个动态规划题目。...LCS(Xn-1,Ym)表示:最长公共序列可以(x1,x2,...xn-1)和(y1,y2,...,ym)找。...LCS(Xn,Ym-1)表示:最长公共序列可以(x1,x2,...xn)和(y1,y2,...,ym-1)找。 求解上面两个子问题,得到公共序列谁最长,那谁就是LCS(X,Y)。...因为,当Xn-1和Ym最后一个元素不相同时,我们又需要将LCS(Xn-1,Ym-1)进行分解:分解成:LCS(Xn-1,Ym-1)和LCS(Xn-2,Ym) 也就是说:问题继续分解,有些问题是重叠...,yj)最长公共序列长度。公式具体解释可参考《算法导论》动态规划章节 三、LCS Python代码实现 #!

    1.5K10

    面试题-python3 找出两个字符串中最大公共字符串

    前言 算法题(语言不限): 找出两个字符串中最大公共字符串,如”abjeccarde”,”sjdgcargde”最大子串为”car” 最大公共字符串 解决思路: 1.先遍历a字符串 2.判断a...字符串同时也字符串b里,添加到f列表 3.最后f列表里面取出最后一个,就是最长串了 # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com...要找出最长串,可以先从长串遍历,判断符合条件就应该立即结束,没必要继续往下找了。...找串 找出两个字符串中最大公共字符串,如”abjeccarde”,”sjdgcargde”最大子串为”car”。..., 'c', 'a', 'r', 'd', 'e'] 找出公共串 已经遍历出a串了,于是判断串也同时b里面就可以了, 找到之后用break跳出循环 # 作者-上海悠悠 QQ交流群:717225969

    1.3K10
    领券