2012-02-21 48 views
5

Lệnh shell để tìm chuỗi con dài nhất của hai chuỗi trong unix là gì? như: foo 'abcdefghi' 'abjklmdefnop' in: defLệnh shell để tìm chuỗi con dài nhất của hai chuỗi trong unix là gì?

+0

Liệu điều này cần phải được POSIX? Nhắm mục tiêu vào bất kỳ bản phân phối cụ thể nào? – Daenyth

+0

cách tốt nhất để làm việc trên hầu hết các linuxes – user1081596

+0

@ user1081596: Sau đó, tôi khuyên bạn nên thực hiện điều này trong perl, vì nó sẽ được cài đặt trên mọi linux trừ khi người dùng đã xóa nó. – Daenyth

Trả lời

2

Điều này được gọi là vấn đề hậu quả phổ biến lâu nhất và có một số thuật toán tuyệt vời cho nó. Kiểm tra các giải pháp lập trình năng động (Nếu bạn google nó, bạn sẽ tìm thấy một tấn triển khai). Nếu bạn thực sự muốn hiểu điều này ở một mức độ thuật toán, kiểm tra MIT bài giảng này,

http://videolectures.net/mit6046jf05_leiserson_lec15/

+1

Cảm ơn bạn đã liên kết tốt đẹp này. Nhưng bây giờ tôi sợ tôi chỉ cần một giải pháp dòng lệnh nhanh chóng tiêu chuẩn và tôi sẽ không nhớ nếu nó được thực hiện với O (n^5) phức tạp. – user1081596

+0

@ user1081596: Các yếu tố đầu vào của bạn sẽ là bao nhiêu? – Daenyth

3

Tôi không chắc chắn nếu có một lệnh duy nhất mà không được công việc cho bạn, nhưng kịch bản bash sau nên làm nó.

#!/bin/bash 

word1="$1" 
word2="$2" 
if [ ${#word1} -lt ${#word2} ] 
then 
     word1="$2" 
     word2="$1" 
fi 
for ((i=${#word2}; i>0; i--)); do 
     for ((j=0; j<=${#word2}-i; j++)); do 
       if [[ $word1 =~ ${word2:j:i} ]] 
       then 
         echo ${word2:j:i} 
         exit 
       fi 
     done 
done 

tiết kiệm ở trên như một tập tin substr.sh làm chmod + x substr.sh

pranithk @ ~ 
09:24:32 :) $ ./substr.sh 'abcdefghi' 'abcdeghi' 
abcde 

pranithk @ ~ 
09:24:33 :) $ ./substr.sh 'abcdefghi' 'abjklmdefnop' 
def 
Các vấn đề liên quan