शब्द श्रृंखला
मान लीजिए word1, word2 का पूर्ववर्ती है यदि और केवल यदि हम word1 में कहीं भी ठीक एक अक्षर जोड़कर इसे word2 के बराबर बना सकते हैं। उदाहरण के लिए, "abc", "abac" का पूर्ववर्ती है।
एक शब्द श्रृंखला शब्दों का एक क्रम है [word_1, word_2, ..., word_k] जहां k >= 1, जहां word_1, word_2 का पूर्ववर्ती है, word_2, word_3 का पूर्ववर्ती है, और इसी तरह।
समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो स्ट्रिंग्स की एक सरणी arr को पहले और एकमात्र आर्गुमेंट के रूप में लेता है।
सरणी arr में प्रत्येक स्ट्रिंग अंग्रेजी लोअरकेस अक्षरों से बनी होती है। हमारे फ़ंक्शन को दी गई सरणी arr से चुने गए शब्दों के साथ सबसे लंबी संभव शब्द श्रृंखला की लंबाई वापस करनी चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const arr = ["a","b","ba","bca","bda","bdca"];
तो आउटपुट होना चाहिए -
const output = 4;
आउटपुट व्याख्या:
सबसे लंबी शब्द श्रृंखलाओं में से एक है "a","ba","bda","bdca"।
उदाहरण
इसके लिए कोड होगा -
const arr = ["a","b","ba","bca","bda","bdca"];
const longestStrChain = (arr) => {
arr.sort((a, b) => a.length - b.length);
const isPredecessor = (word1 = '', word2 = '') => {
if(Math.abs(word1.length - word2.length) !== 1){
return false;
};
for(let i = 0; i < word2.length; i++){
const word = word2.slice(0, i) + word2.slice(i + 1);
if(word === word1){
return true;
};
};
return false;
};
const array = [];
let max = 0;
for(let i = arr.length - 1; i >= 0; i--){
array[i] = 1;
for(let j = arr.length - 1; j > i; j--){
if(isPredecessor(arr[i], arr[j])){
array[i] = Math.max(
array[i],
1 + array[j],
);
};
};
max = Math.max(max, array[i]);
};
return max;
};
console.log(longestStrChain(arr));
आउटपुट
कंसोल में आउटपुट होगा -
4