この問題は、C++ でいうところの stack というデータ構造を用いることで解くことができます。
文字列を順番に stack へ入れていきながら、最後に入れた要素と同じだった場合に stack の最後に入れた要素を削除すればよいです。
計算量は で、この問題を十分高速に解くことができました。
#include <bits/stdc++.h> using namespace std; int main(){ string s; cin >> s; int n = s.size(); stack<char> q; for(int i = 0; i < n; i++){ if(q.size() && q.top() == s[i]){ q.pop(); }else{ q.push(s[i]); } } string ans = ""; while(q.size()){ ans += q.top(); q.pop(); } reverse(ans.begin(), ans.end()); cout << ans << endl; }