Vấn đề sửa từ string sang string là tìm ra một chuỗi các thao tác chỉnh sửa tối thiểu nhằm thay đổi từ một string cho trước sang một string cho trước khác. Độ dài của chuỗi chỉnh sửa thể hiện sự khác nhau giữa hai string. Các chương trình xác định sự khác nhau theo cách này thường được dùng trong các trường hợp sau:
(1)Các chương trình khác nhau giúp xác định các phiên bản của text file khác nhau như thế nàọ Chẳng hạn, việc tính toán sự khác nhau giữa các phần đã được xem xét rồi của 1 mô đun phần mềm sẽ giúp các lập trình viên đánh dấu sự phát triển (tiến triển) của mô đun trong quá trình sửa chữa, hoặc giúp cho việc tạo các test case để thi hành các phần đã thay đổi của mô đun. Một ứng dụng khác sẽ tự động tạo ra các vạch thay đổi cho các phiên bản mớị
(2)Các tài liệu được xem lại một cách thường xuyên như các chương trình hay các bức đồ hoạ được lưu một cách kinh tế nhất thành một tập có liên quan tới phiên bản cơ sở. Vì các thay đổi thì thường nhỏ và chỉ chiếm khoảng chưa đầy 10% không gian cần thiết cho 1 bản copy hoàn chỉnh, các kỹ thuật khác có thể lưu tương đương khoảng 11 bản đã được xem lại trong 1 không gian nhỏ hơn so với việc lưu giữ 2 bản đã được xem lại (1 bản gốc và 1 bản sao lưu) trong định dạng clear text.
(3)Các thay đổi đối với các chương trình và các dữ liệu khác được phân tán một cách kinh tế nhất, chúng là một chuỗi các chỉnh sửa nhằm biến đổi phiên bản cũ thành một phiên bản mớị Hướng nghiên cứu này thường được dùng trong phân tán phần mềm. Một ứng dụng có liên quan có thể được tìm thấy trong các phiên bản hiển thị và các gói đồ hoạ. Các chương trình này cập nhật một cách hiệu quả bằng cách tính sự khác nhau về nội dung giữa phiên bản cũ và mới, sau đó chỉ truyền những thay đổi tới phần hiển thị.
(4)Trong lĩnh vực di truyền học, các thuật toán khác nhau so sánh các phân tử dàị Sự khác nhau cung cấp một mối quan hệ giữa các loại cơ thể sinh vật .
Hầu hết các chương trình hiện tại tính toán sự khác nhau đều dựa trên các thuật toán xác định chuỗi chung dài nhất (LCS). Một LCS của hai string chứa chuỗi các ký tự
chung của hai string bằng cách xoá đi 0 hoặc nhiều ký tự từ mỗi string đó [8]. Chẳng hạn, LCS của hai string shanghai và sakhalin là sahaị Khi một LCS đã được tạo ra, tất cả các ký tự không được chứa trong nó được xem như là phần khác nhau giữa hai string. Qua quá trình scan đồng thời trên hai string, LCS sẽ tách các ký tự này ra một cách nhanh chóng. Chẳng hạn, trong đoạn script dưới đây, dựa trên LCS sahai, chúng ta có thể xây dựng chuỗi sakhalin từ chuỗi shanghai:
M 0,1 M 2,1 A “k” M 5,2 A “l” M 7,1 A “n”
Trong đó, lệnh dạng M p,l là lệnh di chuyển, nó thêm một chuỗi S[p,….p + l - 1] của chuỗi S tới chuỗi đích. Lệnh dạng A “w” thêm chuỗi w tới chuỗi đích. Trong ví dụ trên, script chiếm nhiều không gian bộ nhớ hơn chuỗi đích. Trong các trường hợp thực tế, chuỗi chung không phân mảnh, và một sự di chuyển đơn bao gồm cả một chuỗi dàị Thêm vào đó, nếu kỹ thuật này được áp dụng đối với text, người ta thường chọn cả một dòng text hơn là các ký tự đơn lẻ. Do đó, không gian nhớ cho 1 hành động di chuyển sẽ không đáng kể so với lệnh thêm (Ađ), do đó cần giảm một cách tối đa lệnh Ađ. Chú ý rằng, trong ví dụ trên, lệnh Ađ cuối cùng có thể được thay thế bằng một lệnh Move, bởi vì ký tự “n” đã xuất hiện trong cả hai chuỗị Nếu theo định nghĩa của LCS, thì “n” không thể được chứa trong LCS. Thuật toán được giới thiệu sau đây sẽ không bỏ sót các trường hợp như vậỵ