給定字符串 S (|S| ≤ 50),定義「咒語」為 S 的任意子串(連續)。咒語的「力量」= 它在 S 中出現的次數(可重疊)。求力量最大的咒語(任意輸出一個)。
輸入:tebidohtebidoh
輸出:tebidoh
「tebidoh」出現 2 次,力量 2。
O(n²) 子串。S 中計數出現次數(含重疊)。O(n³),n=50 時 125,000 操作,極快 AC。子串包含長度為 1 的字符!
單字符 c 的力量 = c 在 S 中出現的次數。
任意長度 ≥ 2 的子串出現次數 ≤ 其首字符出現次數。
因此 最大力量必由某個單字符達成!
算法:統計 26 個小寫字母頻率,輸出頻率最高的字母。
樣例 tebidohtebidoh 中 't','e','b','i','d','o','h' 各 2 次,輸出任意一個均正確。
// 方法一:KMP 暴力(複雜但通用)
// 方法二:單字符統計(極簡)
#include <bits/stdc++.h>
using namespace std;
int main() {
string s; cin >> s;
int cnt[26] = {}, best = 0, maxc = 0;
for (char c : s) if (++cnt[c-'a'] > maxc) { maxc = cnt[c-'a']; best = c-'a'; }
cout << char('a' + best) << "\n";
return 0;
}
Timus 1723 表面是字符串模式匹配,實則是讀題細節 + 數學觀察的陷阱題。最優解僅需 O(n) 統計字符頻率。此類「看似複雜實則簡單」的題目在 ACM/ICPC 中常見,訓練「先思考最簡單模型是否適用」的習慣極其重要。