2012-02-21 9 views
5

यूनिक्स में दो तारों की सबसे लंबी आम सबस्ट्रिंग खोजने के लिए शेल कमांड क्या है? की तरह: foo 'abcdefghi' 'abjklmdefnop' प्रिंट: डीईएफ़यूनिक्स में दो तारों की सबसे लंबी आम सबस्ट्रिंग खोजने के लिए शेल कमांड क्या है?

+0

POSIX होने के लिए इस जरूरत है? किसी भी विशिष्ट distro पर लक्षित? – Daenyth

+0

यह सबसे अच्छा है कि यह लिनक्स – user1081596

+0

@ user1081596 पर काम कर रहा है: तो मैं इसे perl में कार्यान्वित करने की अनुशंसा करता हूं, क्योंकि यह प्रत्येक लिनक्स पर तब तक इंस्टॉल किया जाएगा जब तक उपयोगकर्ता ने इसे हटा दिया हो। – Daenyth

उत्तर

2

यह सबसे लंबे समय तक आम subsequence समस्या के रूप में जाना जाता है और इसके लिए कुछ महान एल्गोरिदम हैं। गतिशील प्रोग्रामिंग समाधान देखें (यदि आप इसे Google करते हैं, तो आपको कार्यान्वयन का एक टन मिल जाएगा)। क्या तुम सच में एक एल्गोरिथम स्तर पर इस बारे में जानना चाहते हैं, तो इस एमआईटी व्याख्यान की जाँच,

http://videolectures.net/mit6046jf05_leiserson_lec15/

+1

इस अच्छे लिंक के लिए धन्यवाद। लेकिन अब के लिए मुझे डर है कि मुझे एक त्वरित मानक कमांड लाइन समाधान की आवश्यकता है और मुझे यह बुरा नहीं लगेगा कि यह ओ (एन^5) जटिलता के साथ लागू किया गया है। – user1081596

+0

@ user1081596: आपके इनपुट का आकार क्या होगा? – Daenyth

3

मुझे यकीन है कि नहीं कर रहा हूँ अगर वहाँ एक भी आदेश है कि के लिए काम करता है है आप लेकिन निम्नलिखित बैश स्क्रिप्ट करना चाहिए यह।

#!/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 
संबंधित मुद्दे

 संबंधित मुद्दे