Go語言LeetCode題解937重新排列日志文件
一 題目描述
937. 重新排列日志文件 - 力扣(LeetCode) (leetcode-cn.com)
給你一個(gè)日志數(shù)組 logs
。每條日志都是以空格分隔的字串,其第一個(gè)字為字母與數(shù)字混合的 標(biāo)識(shí)符 。
有兩種不同類型的日志:
- 字母日志:除標(biāo)識(shí)符之外,所有字均由小寫字母組成
- 數(shù)字日志:除標(biāo)識(shí)符之外,所有字均由數(shù)字組成
請按下述規(guī)則將日志重新排序:
- 所有 字母日志 都排在 數(shù)字日志 之前。
- 字母日志 在內(nèi)容不同時(shí),忽略標(biāo)識(shí)符后,按內(nèi)容字母順序排序;在內(nèi)容相同時(shí),按標(biāo)識(shí)符排序。
- 數(shù)字日志 應(yīng)該保留原來的相對(duì)順序。
返回日志的最終順序。
示例 1:
輸入:logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"] 輸出:["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"] 解釋: 字母日志的內(nèi)容都不同,所以順序?yàn)?"art can", "art zero", "own kit dig" 。 數(shù)字日志保留原來的相對(duì)順序 "dig1 8 1 5 1", "dig2 3 6" 。
示例 2:
輸入:logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"] 輸出:["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]
提示:
1 <= logs.length <= 100
3 <= logs[i].length <= 100
logs[i] 中,字與字之間都用 單個(gè) 空格分隔
題目數(shù)據(jù)保證 logs[i] 都有一個(gè)標(biāo)識(shí)符,并且在標(biāo)識(shí)符之后至少存在一個(gè)字
二 分析
日志除去開頭的標(biāo)簽可以分成兩種子串:數(shù)字和字母,
首先分類,判斷不包含標(biāo)簽的子串分別push進(jìn)vector;
數(shù)字的vector不需要排序。
排序字母數(shù)組,重載sort(),sort需要用戶定義字符串比較規(guī)則:
cmp比較器先比較 log(除去標(biāo)簽)的子串,子串不相等就返回短的子串;
子串相等時(shí)比較標(biāo)識(shí)符,返回標(biāo)識(shí)符字典序小的;
最后將排序好的字母和不用排序的數(shù)字兩個(gè)數(shù)字添加進(jìn)res中。
三 答案
class Solution { public: static bool cmp(string& str1, string& str2){ int idx1=str1.find(' '), idx2=str2.find(' '); auto substr1=str1.substr(idx1+1), substr2=str2.substr(idx2+1);//標(biāo)識(shí)符后的子串 if(substr1 != substr2)return substr1<substr2;//子串進(jìn)行字典序排序 return str1<str2;//子串相同,排序標(biāo)識(shí)符 } vector<string> reorderLogFiles(vector<string>& logs) { vector<string> nums, alphas, res; //日志分成兩類字母和數(shù)字分別存放在alphas 和 nums中,res為最后的結(jié)果。 for (auto &iter : logs) { int index = iter.find_first_of(' '); //分割tag 和 log 的pos int idx_log = index + 1; //log的pos if (idx_log < iter.size() && iter[idx_log] <= '9' && iter[idx_log] >= 0) { nums.push_back(iter); } else if (idx_log < iter.size()){ alphas.push_back(iter); } } sort(alphas.begin(), alphas.end(), cmp); for (auto &iter : alphas) { res.push_back(iter); } for (auto &iter : nums) { res.push_back(iter); } return res; } };
以上就是Go語言LeetCode題解937重新排列日志文件的詳細(xì)內(nèi)容,更多關(guān)于Go語言重新排列日志文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
go語言題解LeetCode506相對(duì)名次示例詳解
這篇文章主要為大家介紹了go語言題解LeetCode506相對(duì)名次示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā)
這篇文章主要介紹了win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā),需要的朋友可以參考下2014-10-10golang?gorm的關(guān)系關(guān)聯(lián)實(shí)現(xiàn)示例
這篇文章主要為大家介紹了golang?gorm的關(guān)系關(guān)聯(lián)實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Go錯(cuò)誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法
這篇文章主要介紹了Go錯(cuò)誤處理之panic函數(shù)使用及捕獲,本篇探討了如何使用 panic 和 recover 來處理 Go 語言中的異常,需要的朋友可以參考下2023-03-03go 下載非標(biāo)準(zhǔn)庫包(部份包被墻了)到本地使用的方法
今天小編就為大家分享一篇go 下載非標(biāo)準(zhǔn)庫包(部份包被墻了)到本地使用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06Golang中的archive/zip包的常用函數(shù)詳解
Golang 中的 archive/zip 包用于處理 ZIP 格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮 ZIP 格式文件的函數(shù)和類型,下面小編就來和大家講解下常用函數(shù)吧2023-08-08golang結(jié)構(gòu)體與json格式串實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了golang結(jié)構(gòu)體與json格式串的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法
這篇文章主要介紹了在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法,需要的朋友可以參考下2014-10-10Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫
這篇文章主要介紹了Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫,Golang?程序在運(yùn)行時(shí)加載C動(dòng)態(tài)庫的技術(shù),跳過了Golang項(xiàng)目編譯階段需要鏈接C動(dòng)態(tài)庫的過程,提高了Golang項(xiàng)目開發(fā)部署的靈活性2022-07-07