前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蓝桥杯 基础练习 完美的代价

蓝桥杯 基础练习 完美的代价

作者头像
Meng小羽
发布2019-12-23 16:50:14
4740
发布2019-12-23 16:50:14
举报
文章被收录于专栏:Debug客栈Debug客栈

问题描述  

回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。

  交换的定义是:交换两个相邻的字符

  例如mamad

  第一次交换 ad : mamda

  第二次交换 md : madma

  第三次交换 ma : madam (回文!完美!)

输入格式  

第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)

  第二行是一个字符串,长度为N.只包含小写字母

输出格式  

如果可能,输出最少的交换次数。

  否则输出Impossible

样例输入

5

mamad

样例输出

3

C++算法

代码语言:javascript
复制
#include<cstdio> 
#include<iostream> 

using namespace std; 

int changes(char s[],char x,int n) 
{ 
   int i,change=0,j,k; 
   for(i=0;i<n/2;i++) 
   { 
      if(s[i]==x) 
      { 
         for(j=i;j<n-i-1;j++) 
            if(s[n-i-1]==s[j]) 
                break; 

         change+=j-i; 

         for(k=j;k>i;k--) 
            s[k]=s[k-1]; 

         s[i]=s[n-i-1]; 
      } 
      else 
      { 
         for(j=n-i-1;j>=i;j--) 
            if(s[i]==s[j]) 
               break; 
         change+=n-i-1-j; 

         for(k=j;k<n-i-1;k++)  s[k]=s[k+1]; 
         s[n-i-1]=s[i]; 
      } 
    } 
    return change; 
} 
int main() 
{ 
    int n,i,k=0,b[26]={0},j; 
    char y,s[8001]={0}; 
     
    scanf("%d\n",&n); 
    for(i=0;i<n;i++) 
    { 
       scanf("%c",&s[i]); 
       b[s[i]-'a']++; 
    } 

    char x; 
    for(j=0;j<26;j++) 
    { 
        if(b[j]%2!=0) 
        { 
            k++; 
            x=j+'a'; 
        } 
    } 
     
    if(k>=2) 
       printf("Impossible\n"); 
    else 
    { 
       printf("%d\n",changes(s,x,n)); 
       return 0; 
    } 
}

本文链接:https://cloud.tencent.com/developer/article/1558091

本文采用CC BY-NC-SA 3.0 Unported协议进行许可,转载请保留此文章链接

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述  
    • 输入格式  
      • 输出格式  
        • 样例输入
          • 样例输出
            • C++算法
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档