算法之道_最长公共子序列_序列可间隔但顺序固定

本文详细阐述了使用C语言实现字符串匹配的方法,包括动态规划算法的应用。通过实例代码展示了如何在字符数组中查找子串,并利用动态规划优化搜索效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<string>
int Max(int x, int y)
{
 return x>y?x:y;
}
int  find(const char *A,const char*B)
{
 int i = 0;
 int j = 0;
 int Record[20][20] = {0};
 int LenA = strlen(A);
 int LenB = strlen(B);
 int flag = 0;
 for( j = 0; j < LenB; j++ )
 {
  if(A[0]==B[j]||flag==1)
  {
   Record[0][j]=1;
   flag=1;
  }
 }
 flag = 0;
 for(i=1;i <LenA; i++)
 {
  if(B[0]==A[i]||flag==1)
  {
   Record[i][0] = 1;
   flag = 1;
  }
 }
 
 for ( i = 1; i < LenA; i++ )
  for( j = 1; j < LenB; j++ )
  {
   if(B[j]==A[i])
    Record[i][j] = Record[i-1][j-1] + 1;
   else 
   {
    Record[i][j] = Max(Record[i-1][j],Record[i][j-1]);
   }
   
  }
  
  printf("%d\n",Record[LenA-1][LenB-1]);
  return 0;
}

void main()
{
 char A[20]={"INTHEBEGINING"};
 char B[20]={"ALLTHINGSARELOST"};
    int num = find(A,B);
}

算法思想:若当前A数组元素与B数组元素相同,则此时最大子序列为当前A,B各减 一元素时的最大子序列.若当前A,B元素不同,则取A减去一个元素与B的当前元素,以及B减去一个元素与A的当前元素中的大者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值