思路:直接从前往后比较,如果s[i]<s[i+1],那么suf[i]<suf[i+1],或如果s[i]>s[i+1],那么suf[i]>suf[i+1],如果相等,就先记录相等的字符个数,一直到某一位<或>了输出相同数量的<或>即可。
有可能直到最后也相等,此时别忘了输出,也别多输出一个字符。
#include <bits/stdc++.h> using namespace std; const int MAXN = 1000005; int n; char s[MAXN]; int main() { int T; scanf("%d", &T); while (T--) { scanf("%d%s", &n, s); int cnt = 1; for (int i = 0; i < n-1; i++) { if (s[i] < s[i+1]) { while (cnt--) printf("<"); cnt = 1; } else if (s[i] > s[i+1]) { while (cnt--) printf(">"); cnt = 1; } else cnt++; } while (--cnt) printf(">"); printf("\n"); } return 0; } /* 5 17 quailtyacmbestacm 5 aadcb */