SRM682 D2M TopBiologist

大文字アルファベットので構成される文字列が与えられる.この文字列に含まれない最小ので構成される文字列を返す.


与えられる文字列の長さは最大でなので長さの文字列が最大となる(長さの文字列を単純に連結すればになるが上手いこと組み合わせれば以下になる).

愚直に探索し,その文字列が見つからなければ返す.
部分文字列を全て列挙しmapに突っ込んだらMLEして落とした.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public:
string findShortestNewSequence(string s) {
  m.clear();

  rep(i, s.size()) {
      stringstream ss;
      REP(j, i, s.size()) {
          string t = s.substr(i, j-i+1);
          if(t.size() >= 10) continue;
          m[t] = true;
      }
  }

  que.push("A");
  que.push("C");
  que.push("G");
  que.push("T");

  string ans = "";
  while(que.size()) {
      string t = que.front();
      que.pop();

      if(!m[t]) {
          ans = t;
          break;
      }

      que.push(t + "A");
      que.push(t + "C");
      que.push(t + "G");
      que.push(t + "T");
  }

  // last check
  return ans;
}