Go語言LeetCode題解937重新排列日志文件
一 題目描述
937. 重新排列日志文件 - 力扣(LeetCode) (leetcode-cn.com)
給你一個日志數(shù)組 logs
。每條日志都是以空格分隔的字串,其第一個字為字母與數(shù)字混合的 標識符 。
有兩種不同類型的日志:
- 字母日志:除標識符之外,所有字均由小寫字母組成
- 數(shù)字日志:除標識符之外,所有字均由數(shù)字組成
請按下述規(guī)則將日志重新排序:
- 所有 字母日志 都排在 數(shù)字日志 之前。
- 字母日志 在內容不同時,忽略標識符后,按內容字母順序排序;在內容相同時,按標識符排序。
- 數(shù)字日志 應該保留原來的相對順序。
返回日志的最終順序。
示例 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"] 解釋: 字母日志的內容都不同,所以順序為 "art can", "art zero", "own kit dig" 。 數(shù)字日志保留原來的相對順序 "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] 中,字與字之間都用 單個 空格分隔
題目數(shù)據(jù)保證 logs[i] 都有一個標識符,并且在標識符之后至少存在一個字
二 分析
日志除去開頭的標簽可以分成兩種子串:數(shù)字和字母,
首先分類,判斷不包含標簽的子串分別push進vector;
數(shù)字的vector不需要排序。
排序字母數(shù)組,重載sort(),sort需要用戶定義字符串比較規(guī)則:
cmp比較器先比較 log(除去標簽)的子串,子串不相等就返回短的子串;
子串相等時比較標識符,返回標識符字典序小的;
最后將排序好的字母和不用排序的數(shù)字兩個數(shù)字添加進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);//標識符后的子串 if(substr1 != substr2)return substr1<substr2;//子串進行字典序排序 return str1<str2;//子串相同,排序標識符 } vector<string> reorderLogFiles(vector<string>& logs) { vector<string> nums, alphas, res; //日志分成兩類字母和數(shù)字分別存放在alphas 和 nums中,res為最后的結果。 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重新排列日志文件的詳細內容,更多關于Go語言重新排列日志文件的資料請關注腳本之家其它相關文章!
相關文章
win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā)
這篇文章主要介紹了win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā),需要的朋友可以參考下2014-10-10golang?gorm的關系關聯(lián)實現(xiàn)示例
這篇文章主要為大家介紹了golang?gorm的關系關聯(lián)實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04Go錯誤處理之panic函數(shù)和recover函數(shù)使用及捕獲異常方法
這篇文章主要介紹了Go錯誤處理之panic函數(shù)使用及捕獲,本篇探討了如何使用 panic 和 recover 來處理 Go 語言中的異常,需要的朋友可以參考下2023-03-03Golang中的archive/zip包的常用函數(shù)詳解
Golang 中的 archive/zip 包用于處理 ZIP 格式的壓縮文件,提供了一系列用于創(chuàng)建、讀取和解壓縮 ZIP 格式文件的函數(shù)和類型,下面小編就來和大家講解下常用函數(shù)吧2023-08-08在ubuntu下構建go語言開發(fā)環(huán)境的方法
這篇文章主要介紹了在ubuntu下構建go語言開發(fā)環(huán)境的方法,需要的朋友可以參考下2014-10-10Golang使用CGO與Plugin技術運行加載C動態(tài)庫
這篇文章主要介紹了Golang使用CGO與Plugin技術運行加載C動態(tài)庫,Golang?程序在運行時加載C動態(tài)庫的技術,跳過了Golang項目編譯階段需要鏈接C動態(tài)庫的過程,提高了Golang項目開發(fā)部署的靈活性2022-07-07