密码脱落——蓝桥杯

391 阅读1分钟
#include<iostream>
#include<cstdio>
#include<cstring>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include<math.h>
#include<algorithm>
#include<string.h>
using namespace std;
int main (){
    char a[1000];
    cin>>a;
    int i,j,ti,tj,ni,nj,sum;
    i=0;
    sum=0;
    j=(int)strlen(a) -1;
    
    while(i<=j){
        //第一种情形:前后相等,则向中间靠拢
        if(a[i]==a[j]){
            i++;
            j--;
        }
        //第二种情形,前后不相等,则就需要找一个最小的移动距离值
        else{
            //每次对数据进行更新、重新赋值
            ti=i;
            tj=j;
            //以右边j为标准,移动左边元素
            while((a[ti]!=a[j])&&ti<j){
                ti++;
            }
            //以左边i为标准,移动右边元素
            while((a[i]!=a[tj])&&tj>=i){
                tj--;
            }
            //找 i右移、j左移中最小的距离
            ni=ti-i;
            nj=j-tj;
            
            if(nj>ni){
                sum=sum+ni;
                i=ti;      //将i设置为新起点
            }
            else{
                sum=sum+nj;
                j=tj;      //将j设置为新起点
            }
        }
    }
    cout<<sum<<endl;
    return 0;
}