華為筆試-字串的連線最長路徑查詢
阿新 • • 發佈:2018-11-10
題目描述
給定n個字串,請對n個字串按照字典序排列。
輸入描述:
輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字串(字串長度≤100),字串中只含有大小寫字母。
輸出描述:
資料輸出n行,輸出結果為按照字典序排列的字串。
示例1
輸入
9
cap
to
cat
card
two
too
up
boat
boot
輸出
boat
boot
cap
card
cat
to
too
two
up
程式碼如下
#include<iostream> #include<map> #include<string> using namespace std; struct dict { string str; dict(const string& _str):str(_str){} bool operator < (const dict& _str) const { int len1 = this->str.length(); int len2 = _str.str.length(); int i = 0, j = 0; while(i < len1 && j < len2) { if(this->str[i] == _str.str[j]) { i++; j++; continue; } else if(this -> str[i] > _str.str[j]) return false; else return true; } return len1 < len2; } }; int main() { map<dict,int> mapdic; map<dict,int>::iterator imap; string str; int n = 0; cin >> n; for(int i = 0; i < n; i++) { cin >> str; imap = mapdic.find(str); if(imap == mapdic.end()) mapdic.insert(make_pair(dict(str),1)); else imap -> second++; } imap = mapdic.begin(); while(imap != mapdic.end()) { while(imap -> second) { cout << (imap -> first).str << endl; imap -> second --; } imap++; } return 0; }