2012-02-21 10 views
5

unixの2つの文字列の最も長い共通部分文字列を見つけるためのシェルコマンドとは何ですか? は次のようになります:foo 'abcdefghi' 'abjklmdefnop' print:defunixの2つの文字列の最も長い共通部分文字列を見つけるためのシェルコマンドは何ですか?

+0

この必要性は、POSIXされるようにしていますか?任意の特定のディストリビューションをターゲットにしていますか? – Daenyth

+0

それはほとんどのlinuxで動作させるのが最善です – user1081596

+0

@ user1081596:これをperlで実装することをお勧めします。ユーザーがそれを削除しない限り、すべてのLinuxにインストールされるからです。 – Daenyth

答えて

2

これは長い共通のサブシーケンス問題として知られており、いくつかの素晴らしいアルゴリズムがあります。ダイナミックプログラミングソリューションをチェックしてください(Googleに実装すれば、たくさんの実装が見つかります)。あなたが本当にアルゴリズムレベルでこれを理解したい場合は、

http://videolectures.net/mit6046jf05_leiserson_lec15/

+1

この素晴らしいリンクをありがとう。しかし、今のところ、私はただの標準的なコマンドラインソリューションが必要なだけで、O(n^5)の複雑さで実装されているかどうかは気にしません。 – user1081596

+0

@ user1081596:入力のサイズはどのくらいですか? – Daenyth

3

、このMITの講義をチェックアウト、私はあなたが、次のbashスクリプトが何をすべきのために仕事をして単一のコマンドがあるかどうかわかりませんそれ。ファイルsubstr.sh がそうであるように上記保存

#!/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 

ます。chmod + xのsubstr.sh

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

pranithk @ ~ 
09:24:33 :) $ ./substr.sh 'abcdefghi' 'abjklmdefnop' 
def 
関連する問題