Rumah > pembangunan bahagian belakang > C++ > Cara menggunakan algoritma urutan biasa terpanjang dalam C++

Cara menggunakan algoritma urutan biasa terpanjang dalam C++

WBOY
Lepaskan: 2023-09-19 15:54:35
asal
1011 orang telah melayarinya

. Dalam C++, kita boleh menggunakan pengaturcaraan dinamik (Dynamic Programming) untuk menyelesaikan masalah LCS.

Cara menggunakan algoritma urutan biasa terpanjang dalam C++Berikut ialah contoh kod C++ yang menunjukkan cara menggunakan algoritma urutan sepunya terpanjang:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

string longestCommonSubsequence(string text1, string text2) {
    int m = text1.size();
    int n = text2.size();
    
    // 创建一个二维数组来存储中间结果
    vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
    
    // 进行动态规划,填充数组
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            // 如果当前字符相等,则在之前的基础上加1
            if (text1[i-1] == text2[j-1]) {
                dp[i][j] = dp[i-1][j-1] + 1;
            } else {
                // 如果当前字符不相等,则取左边或上边的最大值
                dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
            }
        }
    }
    
    // 根据dp数组构建最长公共子序列
    int i = m;
    int j = n;
    string lcs = "";
    while (i > 0 && j > 0) {
        if (text1[i-1] == text2[j-1]) {
            // 如果当前字符相等,则将字符加入最长公共子序列中
            lcs = text1[i-1] + lcs;
            i--;
            j--;
        } else {
            // 如果当前字符不相等,则根据dp数组移动指针
            if (dp[i-1][j] >= dp[i][j-1]) {
                i--;
            } else {
                j--;
            }
        }
    }
    
    return lcs;
}

int main() {
    string text1 = "ABCD";
    string text2 = "ACDF";
    
    string lcs = longestCommonSubsequence(text1, text2);
    
    cout << "最长公共子序列为:" << lcs << endl;
    
    return 0;
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menggunakan pengaturcaraan dinamik untuk membina tatasusunan dua dimensi

Tatasusunan membina urutan sepunya terpanjang. Akhir sekali, hanya keluarkan urutan biasa terpanjang.

Di atas ialah contoh menggunakan algoritma urutan lazim terpanjang dalam C++. Melalui idea pengaturcaraan dinamik, kami boleh menyelesaikan masalah LCS dengan cekap dan mencari urutan biasa terpanjang dalam dua rentetan.

Atas ialah kandungan terperinci Cara menggunakan algoritma urutan biasa terpanjang dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan