मान लीजिए कि हमारे पास शब्दों की एक सूची है और एक चौड़ाई k है, हमें टेक्स्ट को इस तरह से व्यवस्थित करना है कि प्रत्येक पंक्ति में वर्णों की संख्या k हो और टेक्स्ट पूरी तरह से उचित हो। यहां हम अपने शब्दों को उतने ही शब्दों में पैक करेंगे जितने हम प्रत्येक पंक्ति में सम्मिलित कर सकते हैं। और जब आवश्यक हो तो हम अतिरिक्त रिक्त स्थान ' ' पैड करेंगे ताकि प्रत्येक पंक्ति में बिल्कुल k वर्ण हों।
यहां शब्दों के बीच अतिरिक्त रिक्त स्थान को यथासंभव समान रूप से वितरित किया जाना चाहिए। यदि एक पंक्ति पर रिक्त स्थान की संख्या शब्दों के बीच समान रूप से विभाजित नहीं होती है, तो बाईं ओर के खाली स्लॉट को दाईं ओर के स्लॉट की तुलना में अधिक स्थान दिए जाएंगे। पाठ की अंतिम पंक्ति के लिए, इसे उचित छोड़ दिया जाना चाहिए और शब्दों के बीच कोई अतिरिक्त स्थान नहीं डाला जाना चाहिए।
तो अगर इनपुट ["द", "ग्रम्पी", "विजार्ड्स", "मेक", "टॉक्सिक", "ब्रू", "फॉर", "द", "एविल", "क्वीन", "और" जैसा है , "जैक"], और के =13
तो आउटपुट होगा -
The grumpy wizards make toxic brew for the evil queen and Jack
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- परिणाम नामक एक सरणी बनाएं
- i के लिए 0 से a के आकार तक, i को j द्वारा अपडेट करें
- चौड़ाई :=0
- जे के लिए i से लेकर a के आकार और चौड़ाई + आकार a[j] + j - i <=b,
- के लिए
- चौड़ाई:=चौड़ाई + आकार a[j]
- स्पेस:=1, अतिरिक्त:=0
- यदि j – 1 !=1 और j !=a का आकार, तो
- स्पेस:=(बी-चौड़ाई)/जे-आई-1
- अतिरिक्त:=(बी-चौड़ाई) मोड (जे-आई-1)
- पंक्ति :=a[i]
- k के लिए i + 1 से j की श्रेणी में
- रिक्त-रिक्त स्थान की संख्या को पंक्ति के साथ संयोजित करें
- अगर अतिरिक्त> 0, तो स्पेस को लाइन से जोड़ दें
- अतिरिक्त 1 घटाएं
- पंक्ति :=a[k] को लाइन से जोड़ना
- 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 ,]