ধরুন আমাদের কাছে শব্দের একটি তালিকা এবং একটি প্রস্থ k আছে, আমাদের পাঠ্যটিকে এমনভাবে সাজাতে হবে যাতে প্রতিটি লাইনে ঠিক k অক্ষর থাকে এবং পাঠ্যটি সম্পূর্ণরূপে ন্যায়সঙ্গত হয়। এখানে আমরা প্রতিটি লাইনে যতগুলি শব্দ সন্নিবেশ করতে পারি ততগুলি শব্দ প্যাক করব। এবং প্রয়োজনে আমরা অতিরিক্ত স্পেস প্যাড করব ' ' যাতে প্রতিটি লাইনে ঠিক k অক্ষর থাকে।
এখানে শব্দের মধ্যে অতিরিক্ত স্পেস যতটা সম্ভব সমানভাবে বিতরণ করা উচিত। যদি একটি লাইনে স্পেস সংখ্যা শব্দের মধ্যে সমানভাবে ভাগ না হয়, বাম দিকের খালি স্লটগুলি ডানদিকের স্লটের চেয়ে বেশি স্পেস বরাদ্দ করা হবে। পাঠ্যের চূড়ান্ত লাইনের জন্য, এটিকে ন্যায়সঙ্গত রেখে দেওয়া উচিত এবং শব্দগুলির মধ্যে কোনও অতিরিক্ত স্থান ঢোকানো হবে না।
সুতরাং যদি ইনপুট হয় ["The", "grumpy", "wizards", "make", "toxic", "brew", "for", "the", "emil", "queen", "and" , "জ্যাক"], এবং k =13
তাহলে আউটপুট হবে −
The grumpy wizards make toxic brew for the evil queen and Jack
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ফলাফল নামে একটি অ্যারে তৈরি করুন
- 0 থেকে a আকারের রেঞ্জের জন্য, i j
- দ্বারা আপডেট করুন
- প্রস্থ :=0
- j-এর জন্য i থেকে a এর আকার এবং প্রস্থ + a[j] + j - i <=b,
- প্রস্থ :=প্রস্থ + a[j] এর আকার
- স্পেস :=1, অতিরিক্ত :=0
- যদি j – 1 !=1 এবং j !=a এর আকার হয়, তাহলে
- স্পেস :=(b - প্রস্থ) / j – i – 1
- অতিরিক্ত :=(b - প্রস্থ) মোড (j – i – 1)
- লাইন :=a[i] i + 1 থেকে j
- রেখা সহ ফাঁকা স্থানগুলির স্পেস নম্বর সংযুক্ত করুন
- যদি অতিরিক্ত> 0 হয়, তাহলে লাইন দিয়ে স্পেস সংযুক্ত করুন
- অতিরিক্ত 1 কমিয়ে দিন
- রেখা :=লাইনের সাথে a[k] সংযুক্ত করুন
- রেঞ্জে k-এর জন্য
- x :=রেখার আকার
- রেখা :=রেখা সহ শূন্যস্থানের সংখ্যা (b - x) সংযুক্ত করুন
- ফলাফলের মধ্যে লাইন ঢোকান
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } void print_vector(vector<vector<auto> > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: vector<string> fullJustify(vector<string> &a, int b) { vector <string> result; int i, j; for(i = 0; i < a.size(); i = j){ int width = 0; for(j = i; j < a.size() && width + a[j].size() + j - i <= b; j++){ width += a[j].size(); } int space = 1; int extra = 0; if(j - i != 1 && j != a.size()){ space = (b - width) / (j - i - 1); extra = (b - width) % (j - i - 1); } string line(a[i]); for(int k = i + 1; k < j; k++){ line += string(space, ' '); if(extra-- > 0){ line += " "; } line += a[k]; } int x = line.size(); line += string(b - x, ' '); result.push_back(line); } return result; } }; main(){ vector<string> v = {"The", "grumpy", "wizards", "make", "toxic", "brew", "for", "the", "evil", "queen", "and", "Jack"}; Solution ob; print_vector(ob.fullJustify(v, 13)); }
ইনপুট
["I", "love", "coding.", "here", "we", "will", "write", "some", "program"] 16
আউটপুট
[The grumpy, wizards make, toxic brew, for the evil, queen and, Jack ,]