সমস্যা বিবরণ
একটি টার্গেট অ্যারে arr এবং সাব-অ্যারেগুলোর অ্যারে sourceArr দেওয়া আছে। sourceArr এর সাব-অ্যারেগুলো যেকোনো ক্রমে কনক্যাট করলে arr বানাবে কিনা চেক করতে হবে। সাব-অ্যারের ভেতরের ক্রম বদলানো যাবে না।
উদাহরণ: arr = [23, 67, 789], sourceArr = [[23], [789, 67]] → false (কারণ [789, 67] থেকে 67, 789 বানানো যায় না)।
সমাধান
const arr1 = [23, 67, 789];
const arr2 = [23, 789, 67];
const sourceArr = [[23], [789, 67]];
const validFormation = (arr, sourceArr) => {
const indexes = new Array(100);
let arrIndex = 0;
let index;
for (let i = 0; i < sourceArr.length; ++i) {
indexes[sourceArr[i][0]] = i;
}
while (arrIndex < arr.length) {
index = indexes[arr[arrIndex]];
if (index === undefined) return false;
for (let j = 0; j < sourceArr[index].length; ++j) {
if (arr[arrIndex] !== sourceArr[index][j]) return false;
++arrIndex;
}
}
return true;
};
console.log(validFormation(arr1, sourceArr)); // false
console.log(validFormation(arr2, sourceArr)); // true
আউটপুট
false true
ব্যাখ্যা
indexesঅ্যারে দিয়ে প্রতিটি সাব-অ্যারের ফার্স্ট এলিমেন্টের ইনডেক্স ম্যাপ করা হয়েছে।- টার্গেট অ্যারে ট্রাভার্স করে ম্যাচিং সাব-অ্যারে খুঁজে বের করা হয়েছে।
- সাব-অ্যারের সব এলিমেন্ট ক্রমাগত ম্যাচ করতে হবে।