fork download
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <string>
  4. #include <climits>
  5.  
  6. using namespace std;
  7.  
  8. string find_representative_string(const string& s) {
  9. int n = s.size();
  10. int max_count = 0;
  11. string result = "";
  12. unordered_map<string, int> freq;
  13.  
  14. // 부분 문자열 길이를 최대 10으로 제한 (효율적인 범위로 제한)
  15. int max_len = min(n, 10);
  16.  
  17. // 슬라이딩 윈도우 기법으로 부분 문자열을 계산
  18. for (int length = 1; length <= max_len; ++length) { // 부분 문자열의 길이
  19. for (int i = 0; i <= n - length; ++i) { // 부분 문자열의 시작 인덱스
  20. string substring = s.substr(i, length);
  21. freq[substring]++;
  22.  
  23. // 빈도수와 사전 순으로 조건 체크
  24. if (freq[substring] > max_count ||
  25. (freq[substring] == max_count && substring < result)) {
  26. max_count = freq[substring];
  27. result = substring;
  28. }
  29. }
  30. }
  31.  
  32. return result;
  33. }
  34.  
  35. int main() {
  36. string s;
  37. cin >> s; // 문자열 입력
  38.  
  39. // 결과 출력
  40. cout << find_representative_string(s) << endl;
  41.  
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0.01s 5272KB
stdin
abcdabcd
stdout
a