求一个串中出现的第一个最长重复字串

该程序采用简单模式匹配方法,从给定的字符串中找出第一个最长的重复子串及其起始下标和长度。通过遍历字符串并比较相邻字符是否相同,更新最长子串信息。程序在主函数中读取用户输入的字符串,然后调用MaxStr函数进行处理,最后输出结果。
摘要由CSDN通过智能技术生成

求一个串中出现的第一个最长重复字串

目的:掌握串的模式匹配应用算法设计。

内容:采用顺序结构存储串,编写一个程序,利用简单模式匹配方法求串s中出现的第一个最长重复子串的下标和长度。

程序代码
void MaxStr(char* Str, int& i, int& j)
{
	int idx, max = 1;	//idx为当前扫描到的下标,max为当前扫描的长度
	char c = Str[0];
	i = 0; j = 1;		//i为起始下标,j为当前最大子串长度
	for (idx = 1; Str[idx] != '\0'; idx++) {
		if (c == Str[idx])	//当字符串连续相同时记录长度
			max++;
		else if (max > j) {	//当当前连续子串比最长子串要长时,改变i和j的值
			i = idx - max;
			j = max;
			max = 1;
		}
		else {	//否则清空长度
			max = 1;
		}
		c = Str[idx];
	}
	if (max > j) {	//判断最后一个连续串
		i = idx - max;
		j = max;
	}
}
代入主函数
#include<stdio.h>
#define Max 9999

void MaxStr(char*, int&, int&);

int main(int argc, const char* argv[])
{
	char Str[Max];
	int i, j;
	printf("请输入一个只包含英文字母的字符串:");
	scanf_s("%s", Str, Max);
	MaxStr(Str, i, j);
	printf("字符串中出现的第一个最长重复子串的下标和长度为:%d、%d。\n\n", i, j);
	return 0;
}
void MaxStr(char* Str, int& i, int& j)
{
	int idx, max = 1;	//idx为当前扫描到的下标,max为当前扫描的长度
	char c = Str[0];
	i = 0; j = 1;		//i为起始下标,j为当前最大子串长度
	for (idx = 1; Str[idx] != '\0'; idx++) {
		if (c == Str[idx])	//当字符串连续相同时记录长度
			max++;
		else if (max > j) {	//当当前连续子串比最长子串要长时,改变i和j的值
			i = idx - max;
			j = max;
			max = 1;
		}
		else {	//否则清空长度
			max = 1;
		}
		c = Str[idx];
	}
	if (max > j) {	//判断最后一个连续串
		i = idx - max;
		j = max;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值