题意:
交换串中的两个位置能否使得串中不含有 “happiness”。
思路:
分情况判断即可
值得注意的是,若串中原不含模式串时,我们的随意交换可能反而会形成模式串。
那么原串中若有相同字符,互换即可。若没有,交换头两个字符即可保证不会形成模式串。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
char str[(int)2e5+100];
int cut,a[5]={0};
gets(str);
cut=0;
int pos=0;
int len=strlen(str);
char *p;
while(pos<len){
p=strstr(str+pos,"happiness");
if(p==NULL) break;
cut++;
pos=p-str;
a[cut]=pos+1;
if(cut==3) break;
pos++;
}
if(cut==3){
puts("NO");
}else if(cut==2){
puts("YES");
printf("%d %d\n",a[1],a[2]+1);
}else if(cut==1){
puts("YES");
printf("%d %d\n",a[1],a[1]+1);
}else{
int ans1=1,ans2=2;
map <char,int> mp;
for(int i=0;i<len;i++){
if(mp[str[i]]!=0){
ans1=mp[str[i]];
ans2=i+1;
break;
}else mp[str[i]]=i+1;
}
puts("YES");
printf("%d %d\n",ans1,ans2);
}
}