Nhờ xem giúp code tìm xâu con chung dài nhất của 2 xâu

a/c giúp e với ạ
đề bài là tìm xâu con dài nhất của hai chuỗi
bài e làm như này ạ

#include <iostream>
#include <string>
using namespace std;

string findLongestPrefix(string s1, string s2)
{
    int a = s1.length();
    int b = s2.length();
    int h,l=0;
    int s3[10000][10000];
    for (int i=0; i < 10000; i++)
    for (int j=0; j < 10000; j++)
        s3[i][j] = 0;
    for (int i=0; i< a; i++)
    for (int j=0; j< b; j++)
    {
        if (i == 0)
            if (s1[i] == s2[j]) 
            {
                s3[i][j]++;
                if (s3[i][j] > l)
                {
                    l = s3[i][j];
                    h = i;
                }
            }
        else 
            if (s1[i] == s2[j]) 
            {
                s3[i][j] = s3[i-1][j-1] + 1;
                if (s3[i-1][j-1] > l)
                {
                    l = s3[i][j];
                    h = i;
                }
            }
    }
    int r = h-l+1;
    string s;
for (int i = 0;i < l;i++)
{
    s[i]=s1[r];
    r++;
}
return s;
}
int main() {
    string s1="nguyenvana";
    string s2="nguyenvanb";
    cout << findLongestPrefix(s1, s2);
    return 0;
}

a/c chỉ giúp e lỗi sai với ạ với nếu có chỗ nào không ổn thì chỉ e với!
e cảm ơn :smiley:

Bạn tạo mảng 2 chiều s3 chiếm gần 400 MB nhằm mục đích gì vậy?

3 Likes

Dòng này thôi là lỗi rồi còn đâu :smiley:

3 Likes

vâng, mk vừa sửa chỗ này với mk nhầm đoạn i,j với nhau

dạ đẻ đánh dấu ptu giống nhau của hai chuỗi ạ.

Đó là câu hỏi tu từ cậu ạ.
Cậu nên để mảng kích thước nhỏ hơn, vì 400 MB đủ để lưu khoảng 70 bộ 7 quyển Harry Potter đó cậu :smile:

4 Likes

Bài này 1 mảng thôi (độ dài lấy theo xâu ngắn hơn), lặp từ phải sang trái :smiley: do j-1.

3 Likes

mk ko đọc kĩ đề, đề của mk chỉ cần lấy tiền tố xâu dài nhất thôi
cảm ơn bn nhiều.

dạ vâng, nếu ko dùng cái này thì có thể chỉ giúp mk cách nào hợp lí hơn không ạ?

Bài này nếu là longest common prefix thì chắc chỉ 3 dòng là xong rồi.
Không hiểu thuật toán của bạn là gì mà lại code dài dòng thế kia?
Bạn có thể mô tả lại thuật toán của bạn bằng mã giả/lưu đồ thuật toán không?

3 Likes

mình nhầm đề bài ạ! đề là tìm tiền tố chung dài nhất nhưng mình lại tìm đoạn dài nhất có thể có của hai xâu :pensive:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?