Where am I?

题目问的是,给定字符器S,求最小的K,使得S中所有K长的子串没有重复。

解法就是从1开始尝试K,使用一个set保存所有字符串的子串,如果碰到见过的子串,就试下一个更大的K,直到不出现重复。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
int n; // <= 100
char s[105];
set<string> m;
 
int main() {
    scanf("%d", &n);
    scanf("%s", s);
    for (int k = 1; k <= n; k++) {
        bool ok = true;
        m.clear();
        for (int i = 0; i + k <= n; i++) {
            char ss[105];
            strncpy(ss, s+i, k);
            string S(ss);
            if (m.find(S) != m.end()) {
                ok = false;
                break;
            }
            m.insert(S);
        }
        if (ok) {
            printf("%d", k);
            return 0;
        }
    }
    return 0;
}