Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 100 + 5;
- set<int> adj[26];
- string str[N];
- int inDeg[26];
- int main(){
- int n;
- scanf("%d", &n);
- for(int i = 1; i <= n; ++i){
- cin >> str[i];
- }
- for(int i = 1; i <= n - 1; ++i){
- for(int j = i + 1; j <= n; ++j){
- int len = min(str[i].size(), str[j].size());
- for(int k = 0; k < len; ++k){
- if(str[i][k] != str[j][k]){
- int u = str[i][k] - 'a';
- int v = str[j][k] - 'a';
- if(adj[u].insert(v).second){
- ++inDeg[v];
- }
- break;
- }
- }
- }
- }
- priority_queue<int, vector<int>, greater<int>> pq;
- for(int i = 0; i < 26; ++i){
- if(inDeg[i] == 0){
- pq.push(i);
- }
- }
- string ans;
- while(!pq.empty()){
- int u = pq.top();
- pq.pop();
- ans.push_back((char)(u + 'a'));
- for(int v : adj[u]){
- --inDeg[v];
- if(inDeg[v] == 0){
- pq.push(v);
- }
- }
- }
- if(ans.size() < 26){
- cout << "-1";
- } else {
- cout << ans;
- }
- return 0;
- }
- // Rework: O(N^2) Solution
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 100 + 5;
- vector<int> adj[26];
- string str[N];
- int inDeg[26];
- int main(){
- int n;
- scanf("%d", &n);
- for(int i = 1; i <= n; ++i){
- cin >> str[i];
- }
- for(int i = 1; i < n; ++i){
- int j = i + 1;
- int len = min(str[i].size(), str[j].size());
- for(int k = 0; k < len; ++k){
- if(str[i][k] != str[j][k]){
- char u = str[i][k] - 'a';
- char v = str[j][k] - 'a';
- adj[u].push_back(v);
- ++inDeg[v];
- break;
- }
- }
- }
- priority_queue<int, vector<int>, greater<int>> pq;
- string ans;
- for(int u = 0; u < 26; ++u){
- if(inDeg[u] == 0){
- pq.push(u);
- }
- }
- while(!pq.empty()){
- int u = pq.top();
- pq.pop();
- ans.push_back((char)(u + 'a'));
- for(int v : adj[u]){
- if(--inDeg[v] == 0){
- pq.push(v);
- }
- }
- }
- if(ans.size() < 26){
- cout << "-1";
- } else {
- cout << ans;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment