什么是shell命令来查找unix中两个字符串的最长公共子字符串?

时间:2012-02-21 18:30:03

标签: linux string shell unix awk

什么是shell命令来查找unix中两个字符串的最长公共子字符串? 喜欢:foo'abcdefghi''abjklmdefnop' 打印:def

2 个答案:

答案 0 :(得分:3)

我不确定是否有一个命令可以为您完成这项工作,但是下面的bash脚本应该这样做。

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

将上述内容保存为substr.sh文件 做chmod + x substr.sh

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

pranithk @ ~
09:24:33 :) $ ./substr.sh 'abcdefghi' 'abjklmdefnop'
def

答案 1 :(得分:2)

这被称为最常见的子序列问题,并且有一些很好的算法。查看动态编程解决方案(如果你谷歌它,你会发现大量的实现)。如果您真的想在算法级别理解这一点,请查看此麻省理工学院的讲座,

http://videolectures.net/mit6046jf05_leiserson_lec15/