C++程式:將單詞轉換為等長行進行文字兩端對齊
假設我們有一組單詞和一個寬度k,我們需要排列文字,使每一行正好包含k個字元,並且文字是完全對齊的。我們將盡可能多地將單詞打包到每一行中。必要時,我們將新增額外的空格' ',以確保每一行正好包含k個字元。
單詞之間的額外空格應儘可能均勻分佈。如果一行上的空格數不能被單詞數整除,則左側的空位將分配比右側空位更多的空格。對於最後一行文字,應左對齊,並且單詞之間不插入額外空格。
因此,如果輸入類似於["The", "grumpy", "wizards", "make", "toxic", "brew", "for", "the", "evil", "queen", "and", "Jack"],並且k = 13
則輸出為:
The grumpy wizards make toxic brew for the evil queen and Jack
為了解決這個問題,我們將遵循以下步驟:
- 建立一個名為result的陣列
- 對於範圍從0到a的大小的i,用j更新i
- width := 0
- 對於範圍從i到a的大小的j,並且width + a[j]的大小 + j – i <= b,
- width := width + a[j]的大小
- space := 1, extra := 0
- 如果j – 1 != 1 並且 j != a的大小,則
- space := (b - width) / (j – i – 1)
- extra := (b - width) % (j – i – 1)
- line := a[i]
- 對於範圍從i + 1到j的k
- 將space個空格與line連線
- 如果extra > 0,則將一個空格與line連線
- 將extra減1
- line := 將a[k]與line連線
- x := line的大小
- line := 將(b - x)個空格與line連線
- 將line插入result
- 返回result
示例 (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 ,]
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP