1 条题解
-
0
思路
奇数长度去一字符使两半相同;仅两种候选,用线性跳过一次比对;双指针只跳过一次字符,不能按删除位置重复判不唯一。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; bool once(const string&a,const string&b){int i=0,j=0,skip=0;while(i<(int)a.size()&&j<(int)b.size()){if(a[i]==b[j]){i++;j++;}else{if(++skip>1)return false;i++;}}return j==(int)b.size();}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n;string u;cin>>n>>u;if(n%2==0){cout<<"NOT POSSIBLE\n";return 0;}int k=n/2;string a=u.substr(0,k),b=u.substr(k+1);vector<string>v;if(once(u.substr(k),a))v.push_back(a);if(once(u.substr(0,k+1),b))v.push_back(b);sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());if(v.empty())cout<<"NOT POSSIBLE\n";else if(v.size()>1)cout<<"NOT UNIQUE\n";else cout<<v[0]<<'\n';}
- 1