मान लीजिए कि हमारे पास शब्दों की एक सरणी और एक चौड़ाई maxWidth है, हमें टेक्स्ट को इस तरह से प्रारूपित करना होगा कि प्रत्येक पंक्ति में वर्णों की अधिकतम संख्या हो और पूरी तरह से उचित हो। हमें अपने शब्दों को लालची दृष्टिकोण से बांधना चाहिए; अर्थात्, प्रत्येक पंक्ति में जितने शब्द हम कर सकते हैं उतने शब्दों को पैक करें। जब आवश्यक हो तो हम अतिरिक्त रिक्त स्थान ' ' पैड करेंगे ताकि प्रत्येक पंक्ति में बिल्कुल अधिकतम विड्थ वर्ण हों।
यहां शब्दों के बीच अतिरिक्त रिक्त स्थान को यथासंभव समान रूप से वितरित किया जाना चाहिए। यदि एक पंक्ति पर रिक्त स्थान की संख्या शब्दों के बीच समान रूप से विभाजित नहीं होती है, तो बाईं ओर के खाली स्लॉट को दाईं ओर के स्लॉट की तुलना में अधिक स्थान दिए जाएंगे। पाठ की अंतिम पंक्ति के लिए, इसे उचित छोड़ दिया जाना चाहिए और शब्दों के बीच कोई अतिरिक्त स्थान नहीं डाला जाना चाहिए।
तो अगर इनपुट पसंद है
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
परिणाम नामक एक सरणी बनाएं
-
मैं के लिए 0 से लेकर ए के आकार तक, i द्वारा j को अपडेट करें
-
चौड़ाई :=0
-
j के लिए श्रेणी 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 :=रेखा का आकार
-
लाइन:=लाइन के साथ रिक्त स्थान की संख्या (बी - एक्स) को संयोजित करें
-
परिणाम में लाइन डालें
-
-
रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#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 = {"I", "love", "coding.", "here", "we", "will", "write", "some", "program"}; Solution ob; print_vector(ob.fullJustify(v, 16)); }
इनपुट
["I", "love", "coding.", "here", "we", "will", "write", "some", "program"] 16
आउटपुट
[I love coding., here we will, write some, program , ]