Java C++算法題解leetcode1592重新排列單詞間的空格
更新時(shí)間:2022年09月14日 10:28:13 作者:AnjaVon
這篇文章主要為大家介紹了Java C++算法題解leetcode1592重新排列單詞間的空格示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
題目要求
思路:模擬
- 模擬就完了
- 統(tǒng)計(jì)空格數(shù)量和單詞數(shù)量,計(jì)算單詞間應(yīng)有的空格數(shù),將它們依次放入結(jié)果字符串,若有余數(shù)則在末尾進(jìn)行填補(bǔ)。
Java
class Solution { public String reorderSpaces(String text) { int n = text.length(), spcnt = 0; List<String> words = new ArrayList<>(); for (int i = 0; i < n; ) { if (text.charAt(i) == ' ' && ++i >= 0 && ++spcnt >= 0) continue; int j = i; while (j < n && text.charAt(j) != ' ') j++; words.add(text.substring(i, j)); // 單詞 i = j; } StringBuilder res = new StringBuilder(); int m = words.size(), dis = spcnt / Math.max(m - 1, 1); String spcs = ""; // 兩單詞間的空格 while (dis-- > 0) spcs += " "; for (int i = 0; i < m; i++) { res.append(words.get(i)); if (i != m - 1) res.append(spcs); } while (res.length() != n) res.append(" "); return res.toString(); } }
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(n),結(jié)果的空間開(kāi)銷
C++
class Solution { public: string reorderSpaces(string text) { int n = text.size(), spcnt = 0; vector<string> words; for (int i = 0; i < n; ) { if (text[i] == ' ' && ++i >= 0 && ++spcnt >= 0) continue; int j = i; while (j < n && text[j] != ' ') j++; words.emplace_back(text.substr(i, j - i)); // 單詞 i = j; } string res; int m = words.size(), dis = spcnt / max(m - 1, 1); string spcs = ""; // 兩單詞之間的空格 while (dis-- > 0) spcs += " "; for (int i = 0; i < m; i++) { res += words[i]; if (i != m - 1) res += spcs; } while (res.size() != n) res += " "; return res; } };
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(n),結(jié)果的空間開(kāi)銷
Rust
- rust有很方便的函數(shù)用以統(tǒng)計(jì)空格和單詞,也有很方便的
repeat
構(gòu)成單詞之間需要的空格。
impl Solution { pub fn reorder_spaces(text: String) -> String { let spcnt = text.chars().filter(|&c| c == ' ').count(); let words: Vec<String> = text.split_whitespace().map(|s| s.to_string()).collect(); let mut res = String::new(); if words.len() == 1 { res.push_str(&words[0]); res.push_str(&" ".repeat(spcnt)); return res } for i in 0..words.len() { res.push_str(&words[i]); res.push_str(&" ".repeat( if i < words.len() - 1 { spcnt / (words.len() - 1) } else { spcnt - spcnt / (words.len() - 1) * (words.len() - 1) })); } res } }
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(n),結(jié)果的空間開(kāi)銷
以上就是Java C++算法題解leetcode1592重新排列單詞間的空格的詳細(xì)內(nèi)容,更多關(guān)于Java C++ 單詞間空格重排的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- C C++算法題解LeetCode1408數(shù)組中的字符串匹配
- Java?C++算法題解leetcode801使序列遞增的最小交換次數(shù)
- Java?C++題解leetcode字符串輪轉(zhuǎn)KMP算法詳解
- Java C++ 算法題解leetcode1582二進(jìn)制矩陣特殊位置
- Java?C++?算法題解leetcode145商品折扣后最終價(jià)格單調(diào)棧
- Java C++ 算法leetcode828統(tǒng)計(jì)子串中唯一字符乘法原理
- Java?C++?算法題解leetcode669修剪二叉搜索樹(shù)示例
- c++算法進(jìn)階刪除有序鏈表中的重復(fù)元素
相關(guān)文章
Qt編寫地圖實(shí)現(xiàn)閃爍點(diǎn)圖的示例代碼
閃爍點(diǎn)圖的核心有三個(gè)要素,城市的名稱、城市的經(jīng)緯度、對(duì)應(yīng)值的大小,當(dāng)值越大閃爍點(diǎn)也就越大,本文就來(lái)實(shí)現(xiàn)一下地圖閃爍點(diǎn)圖,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12C語(yǔ)言指針如何實(shí)現(xiàn)字符串逆序反轉(zhuǎn)
這篇文章主要介紹了C語(yǔ)言指針如何實(shí)現(xiàn)字符串逆序反轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07C++中strlen函數(shù)的三種實(shí)現(xiàn)方法
在C語(yǔ)言中我們要獲取字符串的長(zhǎng)度,可以使用strlen?函數(shù),strlen?函數(shù)計(jì)算字符串的長(zhǎng)度時(shí),直到空結(jié)束字符,但不包括空結(jié)束字符,因?yàn)閟trlen函數(shù)時(shí)不包含最后的結(jié)束字符的,因此一般使用strlen函數(shù)計(jì)算的字符串的長(zhǎng)度會(huì)比使用sizeof計(jì)算的字符串的字節(jié)數(shù)要小2022-05-05OpenCV中的cv::Mat函數(shù)將數(shù)據(jù)寫入txt文件
這篇文章主要介紹了OpenCVcv::Mat中的數(shù)據(jù)按行列寫入txt文件中,需要的朋友可以參考下2018-05-05C++數(shù)據(jù)結(jié)構(gòu)之list詳解
list是一種序列式容器。list容器完成的功能實(shí)際上和數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表是極其相似的,list中的數(shù)據(jù)元素是通過(guò)鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點(diǎn),即:在鏈表的任一位置進(jìn)行元素的插入、刪除操作都是快速的2021-11-11C語(yǔ)言實(shí)現(xiàn)切片數(shù)組的示例詳解
由于c語(yǔ)言沒(méi)有集合類的標(biāo)準(zhǔn)庫(kù),需要用時(shí)只能自己實(shí)現(xiàn),所以本文參考了go語(yǔ)言的slice,找到了一種非常簡(jiǎn)化的動(dòng)態(tài)數(shù)組接口,下面我們就來(lái)看看如何在C語(yǔ)言中實(shí)現(xiàn)切片吧2024-03-03