c寻找最大相同子串

本文介绍了一种使用C++来寻找两个字符串之间的最长公共子串的方法。通过双重循环遍历并比较两个字符串,找到最长匹配部分。该程序利用标准C++库中的功能,并展示了如何有效地处理字符串比较。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;

void MaxStr(char* str1, char* str2,char* sam)
{
    if (str1 == NULL || str2 == NULL)
    {
		return;
    }

	int nLen1,nLen2,pos1,pos2;
	nLen1 = strlen(str1);
	nLen2 = strlen(str2);
	int count, nMax=0;
	int i,j;
	for (i=0;i<nLen1;i++)
	{
		for (j=0;j<nLen2;++j)
		{
			if (str1[i] == str2[j])
			{
				
				pos1 = i;
				pos2 = j;
				count =  0;
				cout<<"i:"<<i<<"  j:"<<j<<endl;
				while((str1[pos1]==str2[pos2])&& (pos1<nLen1 && pos2<nLen2))
				{
					
					count++;
					pos1++;
					pos2++;
					
				} //end while
                cout<<"count:"<<count<<endl;
				if (count>nMax)
				{
					nMax = count;

                     memcpy(sam,&str2[j],nMax);

				}//end if
				cout<<endl;

			}//end str[i]==str2[j]
		}//end j
	}//end i
  
}

int main()
{
     char* str1 = "zabcd";
	 char* str2 = "nzgababcabcdfd";
	
	 char samStr[20] = {0};
	 
	 MaxStr(str1,str2,samStr);
	 cout<<samStr<<endl;


	return 0;
}

下面是使用 **C 语言**实现的“寻找最长连续相同字符子串”的完整程序。 ```c #include <stdio.h> #include <string.h> // 函数:查找最长连续相同字符子串 void find_longest_consecutive_char(const char *s, char *result) { // 处理空字符串 if (s == NULL || strlen(s) == 0) { result[0] = '\0'; return; } int max_length = 1; char max_char = s[0]; int current_length = 1; char current_char = s[0]; // 遍历从第二个字符开始 for (int i = 1; s[i] != '\0'; i++) { if (s[i] == current_char) { current_length++; } else { // 字符变化,检查是否更新最大值 if (current_length > max_length) { max_length = current_length; max_char = current_char; } // 重置当前字符和长度 current_char = s[i]; current_length = 1; } } // 检查最后一段 if (current_length > max_length) { max_length = current_length; max_char = current_char; } // 构造结果子串:重复 max_char max_length 次 for (int i = 0; i < max_length; i++) { result[i] = max_char; } result[max_length] = '\0'; // 添加结束符 } // 示例用法 int main() { char input[] = "aaabbccccddddd"; char result[1000]; // 假设最长子串不超过999字符 find_longest_consecutive_char(input, result); printf("输入字符串: %s\n", input); printf("最长连续相同字符子串: %s\n", result); printf("长度: %d\n", (int)strlen(result)); return 0; } ``` --- ### 🔍 代码解释: - `find_longest_consecutive_char`: - 输入:原始字符串 `s`,输出缓冲区 `result`。 - 使用 `current_char` 和 `current_length` 跟踪当前连续段。 - 使用 `max_char` 和 `max_length` 记录全局最优。 - 最后将 `max_char` 重复 `max_length` 次写入 `result`。 - `result` 必须预先分配足够空间(如本例中的 `char result[1000]`)。 - 时间复杂度:**O(n)**,仅需一次遍历。 - 空间复杂度:**O(1)** 辅助变量 + 输出空间。 ### ✅ 示例输出: ``` 输入字符串: aaabbccccddddd 最长连续相同字符子串: ddddd 长度: 5 ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值