当前位置: 首页 > article >正文

算法刷题[比较两个字符串的最大公字符串(滑动窗口实现)]

题目:编程实现:找出两个字符串中最大公共子字符串,"abccade","dgcadde"的最大子串为"cad"

代码如下所示:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* 
   编程实现:找出两个字符串中最大公共子字符串,
   如"abccade","dgcadde"的最大子串为"cad" 
 */

/* 采用滑动窗口的算法实现 */
bool fun(char* str1, char* str2, char* ret)
{
	if ((NULL == str1) || (NULL == str2) || (NULL == ret)) return false;
	int maxlen=0, startindex = 0, retlen = 0;
	int len1 = strlen(str1), len2 = strlen(str2);
	for (int i = 0; i < len1; i++)          //str1字符串的遍历
	{
		for (int j = 0; j < len2; j++)      //str2字符串的遍历
		{
			retlen = 0;
			/* 如果首字母相等,进行滑动窗口的比较 */
			while ((i + retlen < len1) && (j + retlen < len2) && (str1[i + retlen] == str2[j + retlen]))
				retlen++;
			if (maxlen < retlen)      //记录相同字符串最长的长度、起始索引地址。
			{
				maxlen = retlen;
				startindex = i;
			}
		}
	}
	if (maxlen > 0)
	{
		strncpy(ret, &str1[startindex], maxlen);
		ret[maxlen] = '\0';
	}else
		ret[maxlen] = '\0';
	return true;
}


int main()
{
	char str1[] = "abdcaddec";
	char str2[] = "dgcadde";
	char ret[10];
	fun(str1, str2, ret);
	printf("str:%s\r\n", ret);
	return 0;
}

运行结果如下所示:


http://www.kler.cn/a/302288.html

相关文章:

  • 【java】签名验签防篡改研究测试
  • 202009 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)
  • WebSocket实现私聊私信功能
  • AWTK-WEB 快速入门(3) - C 语言 Http 应用程序
  • .NET 8 项目 Docker 方式部署到 Linux 系统详细操作步骤
  • CTTSHOW-WEB入门-爆破25-28
  • 基于Boost库的搜索引擎开发实践
  • OpenFeign原理
  • docker-ce.repo源、kubernetes.repo源
  • 通过AI来创建一个_____html css网页制作成品 例子演示
  • 精准电商营销:基于京东商品详情API返回值的数据分析
  • 探索Python中的链式赋值、系列解包赋值与常量
  • Vue.js中computed的使用方法
  • Minio笔记-Centos搭建Minio
  • pgAdmin 4备份数据库失败,解决
  • 武汉墨家人俱乐部
  • 计算机毕业设计选题推荐-校园车辆管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定)
  • 如何为 MongoDB 3.0.4 以下版本选择合适的 PyMongo 版本
  • 第10章 中断和动态时钟显示
  • 零基础5分钟上手亚马逊云科技-为网站服务器配置DNS域名
  • 基础的八股
  • Go语言现代Web开发03 关键字和包以及基本数据类型
  • word文档无损原样转pdf在windows平台使用python调用win32com使用pip安装pywin32
  • PHP精准投放高效转化微信代金券发券系统小程序源码
  • QuecPythonHeliosSDK 使用介绍
  • 借助ChatGPT撰写学术论文的10条规则