LCS
来源:互联网 发布:两会期间网络保障方案 编辑:程序博客网 时间:2024/06/15 07:19
#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAXN 9999int num[MAXN][MAXN];int step[MAXN][MAXN];char res[MAXN];void get_lcs(char s1[],char s2[],int i,int j){ int m = num[j][i]-1; while(i>=0&&j>=0){ if(step[j][i]==0){ res[m--] = s1[i]; i--; j--; } else if(step[j][i] == -1) i--; else j--; }}int calc_lcs(char s1[],char s2[],int i,int j){ if (i==-1 || j==-1) return 0; if (num[j][i]>-1) return num[j][i]; int n1,n2,n; if(s1[i] == s2[j]){ n = calc_lcs(s1,s2,i-1,j-1); step[j][i] = 0; num[j][i] = n+1; return n+1; } else{ n1 = calc_lcs(s1,s2,i-1,j); n2 = calc_lcs(s1,s2,i,j-1); if(n1>n2){ step[j][i] = -1; num[j][i] = n1; return n1; } else{ step[j][i] = 1; num[j][i] = n2; return n2; } }}double calc(char s1[],char s2[]){ int len1,len2,i,j; len1 = strlen(s1); len2 = strlen(s2); for(j=0;j<len2;j++) for(i=0;i<len1;i++){num[j][i] = -1; step[j][i] = 9;} //int l = num[len2-1][len1-1]; int l = calc_lcs(s1,s2,len1-1,len2-1); int shorter = (len1 < len2 ? len1 : len2); double percent = (double)l/(double)shorter; return percent;}int main(){/* *fgets(s1,MAXN,file);fgets(s2,MAXN,file);*/ /* char s1[] = "asdf"; char s2[] = "aqweqwedqrqef";*/char s1[MAXN];char s2[MAXN];FILE *instream;instream = freopen("text","r",stdin);if (instream == NULL)fprintf(stderr,"freopen failed!!!!!!!!!");gets(s1);gets(s2);fclose(stdin);instream = NULL; double p = calc(s1,s2);printf("%s\n",s1);printf("%s\n",s2); printf("%f\n",p); return 0;}
0 0
- LCS
- LCS
- lcs
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- lcs
- LCS
- LCS
- lcs
- LCS
- LCS
- LCS
- LCS
- Android--JNI简单的实例解析
- Android自定义View之音频条形图
- linux du 命令 显示文件、目录大小
- 诈骗短信从何而来?
- EXEC语句
- LCS
- Android启动流程分析- action的执行和service的启动
- mysql 修改字段值等于另一字段值或另一字段值的拼接
- Intel RealSense C# 入门
- iOS 基于runtime 解决UIButton重复点击 发送多次请求问题
- MAC下zsh配置
- ReactNative初学笔记1.1flexbox布局
- 求出现字母个数
- HM编码器代码阅读(5)——参考帧的选择