|
101 | 101 | // @lc code=start
|
102 | 102 | class Solution {
|
103 | 103 | public:
|
104 | | - string callme(string& st, unordered_map<char, vector<int>>& mm, int i){ |
105 | | - if(st.size() <= 1) return st; |
106 | | - |
107 | | - if(i >= mm[st[0]].size()){ |
108 | | - sort(st.begin(), st.end()); |
109 | | - return st; |
110 | | - } |
111 | | - |
112 | | - sort(st.begin(), st.end(), [&mm,&i](char x,char y){ |
113 | | - return mm[x][i] > mm[y][i]; |
114 | | - }); |
115 | | - |
116 | | - string ret = ""; |
117 | | - int j = 0; |
118 | | - |
119 | | - while(j<st.size()){ |
120 | | - int first = j; |
121 | | - string tmp = ""; |
122 | | - |
123 | | - while(j<st.size() && mm[st[first]][i] == mm[st[j]][i]) |
124 | | - tmp += st[j++]; |
125 | | - |
126 | | - ret += callme(tmp, mm, i+1); |
127 | | - } |
128 | | - return ret; |
129 | | - } |
130 | | - |
131 | 104 | string rankTeams(vector<string>& votes) {
|
132 | | -int n = votes[0].size(); |
133 | | - |
| 105 | + string st = votes[0]; |
| 106 | + |
134 | 107 | unordered_map<char, vector<int>> mm;
|
135 | | - for(char c: votes[0]) |
136 | | - mm[c] = vector<int>(n, 0); |
| 108 | + for(char c: st) |
| 109 | + mm[c] = vector<int>(st.size(), 0); |
137 | 110 |
|
138 | 111 | for(int i=0; i<votes.size(); i++)
|
139 | | - for(int c=0; c<n; c++) |
| 112 | + for(int c=0; c<st.size(); c++) |
140 | 113 | mm[votes[i][c]][c]++;
|
141 | | - |
142 | | - return callme(votes[0], mm, 0); |
| 114 | + |
| 115 | + sort(st.begin(), st.end(), [&mm](const char& x, const char& y){ |
| 116 | + for(int i=0; i<mm[x].size(); i++) |
| 117 | + if(mm[x][i] != mm[y][i]) |
| 118 | + return mm[x][i] > mm[y][i]; |
| 119 | + return x < y; |
| 120 | + }); |
| 121 | + |
| 122 | + return st; |
143 | 123 | }
|
144 | 124 | };
|
145 | 125 | // @lc code=end
|
0 commit comments