Gọi far[i] là vị trí xa nhất mà xâu con (i,far[i]) xuất hiện trong xâu(1,i-1).
Với mỗi i ta sẽ tạo xâu có dạng (i,n)+’#”+(1,i-1); khi đó far[i] sẽ là độ dài tiền tố dài nhất xuất hiện trong phần xâu (1,i-1). Ta có thể dùng kmp để tính phần này.
Sau đó với mỗi i, ta sẽ có dp[i]=min(dp[i],dp[i-1]+a) và dp[j] j=i+1->far[i+1]=min(dp[j],dp[i]+b).