C++動態(tài)規(guī)劃之最長公子序列實例
更新時間:2015年04月20日 12:27:22 作者:司青
這篇文章主要介紹了C++動態(tài)規(guī)劃之最長公子序列,實例分析了C++求最長公子序列的相關技巧,是C++字符串操作的一個典型應用,需要的朋友可以參考下
本文實例講述了C++動態(tài)規(guī)劃之最長公子序列解決方法。分享給大家供大家參考。具體分析如下:
問題描述:
求出兩個字符串中的最長公子序列的長度。
輸入:
csblog
belong
輸出:
max length = 4
實現代碼:
#include <stdio.h> #include <string.h> int arr[200][200]; /* 表示str1的前i位和str2的前j位的最長公子序列的長度 */ int main() { char str1[100],str2[100]; /* 輸入數據 */ scanf("%s%s",str1,str2); int len1 = strlen(str1); int len2 = strlen(str2); /* 初始化數組 */ int i,j; for(i = 0 ; i <= len1 ; ++i) { for(j = 0 ; j <= len2 ; ++j) arr[i][j] = 0; } /* 計算 */ for(i = 1 ; i <= len1 ; ++i) { for(j = 1 ; j <= len2 ; ++j) { /* 字符相同,則最長公子序列長度加1 */ if(str1[i - 1] == str2[j - 1]) { arr[i][j] = arr[i - 1][j - 1] + 1; } else /* 當前字符不相同,則取上次選擇的最大值做為當前結果 */ { arr[i][j]=arr[i][j-1]>arr[i-1][j]?arr[i][j-1]:arr[i-1][j]; } } } /* 輸出結果 */ printf("max length = %d\n",arr[len1][len2]); return 0; }
希望本文所述對大家的C++程序設計有所幫助。