[思路]
暴力枚举 + 双指针:
遍历字符串的每个组合 s _ i , s _ j(j>i),
如果 s _ i , s _ j 数量差为 1 时:遍历两字符串的每个字符,如果不同就删除长字符串的字符,记录操作次数,小于 2 就 sum+1,最后输出答案。
代码来咯:
#include <bits/stdc++.h>
using namespace std;
int n,sum;//记录答案
string a[10005];
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];//输入
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){//遍历数组(不重复遍历 )
int x=a[i].size(),y=a[j].size();//i和j的长度
if(a[i]==a[j]) sum++; //第一种情况:完全相等
if(max(x,y)-min(x,y)==0) continue;//又不等又长度相当(插入和删除都会改变长度)
else if(max(x,y)-min(x,y)==1)//长度差1的情况
{
int us=0;//记录操作次数
for(int y1=0,y2=0;y1<x,y2<y;y1++,y2++){
if(us==2)
break;//次数大于1直接过掉
if(a[i][y1]!=a[j][y2]){
if(x<y) y1--;
else y2--; //把小的减1(下一轮循环就是大的和小的前一个比)
us++;//增加次数
}
}
if(us<2) sum+=2; //次数不大于二就加2(需注意中提及过)
}
}
}
cout<<sum;//输出
return 0;
}