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

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

作者头像
天道Vax的时间宝藏
发布2021-08-11 10:44:01
2310
发布2021-08-11 10:44:01
举报
文章被收录于专栏:用户5305560的专栏

基础练习 完美的代价

时间限制:1.0s

内存限制:512.0MB

问题描述

  回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。   交换的定义是:交换两个相邻的字符   例如mamad   第一次交换 ad : mamda   第二次交换 md : madma   第三次交换 ma : madam (回文!完美!)

输入格式

  第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)   第二行是一个字符串,长度为N.只包含小写字母

输出格式

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

样例输入

代码语言:javascript
复制
5
mamad

样例输出

代码语言:javascript
复制
3

题意理解:

此题要求判断所输入字符串是否能转换成回文串,不能的话输出"Impossible"即可,若能,则输出该字符串变换成回文串所需相邻字符交换的次数。用贪心的思想即可理解为将字符串后半段与前半段相应字符交换到对应的位置所需要的交换次数,累加即可得到最终答案。

代码:

代码语言:javascript
复制
/**
 *
 * ━━━━━━神兽出没━━━━━━
 *    ┏┓   ┏┓
 *   ┏┛┻━━━┛┻┓
 *   ┃       ┃
 *   ┃   ━   ┃
 *   ┃ ┳┛ ┗┳ ┃
 *   ┃       ┃
 *   ┃   ┻   ┃
 *   ┃       ┃
 *   ┗━┓   ┏━┛Code is far away from bug with the animal protecting
 *     ┃   ┃    神兽保佑,代码无bug
 *     ┃   ┃
 *     ┃   ┗━━━┓
 *     ┃       ┣┓
 *     ┃       ┏┛
 *     ┗┓┓┏━┳┓┏┛
 *      ┃┫┫ ┃┫┫
 *      ┗┻┛ ┗┻┛
 *
 * ━━━━━━感觉萌萌哒━━━━━━
 *
 */

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<deque>
#include<map>
#include<iomanip>
#include<queue>
#include<list>
#include<string>
#include<set>
#include<stack>
#include<vector>
typedef long long ll;
using namespace std;
int main()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
	int j=n-1;
	int cnt=0;//保存交换的次数
	int flag=0;//判断是否已经有一个单独的字符
	for(int i=0;i<j;i++)//i指针从头遍历到倒数第二个字符 
	{
		for(int k=j;k>=i;k--){//k指针从后面往前一直到i寻找和s[i]相同的s[k] 
			if(k==i){//如果找不到相同的 
				if(n%2==0||flag==1)//两种情况:偶数长的字符串存在单个字符或者奇数长字符串存在两个单字符 
				{
					cout<<"Impossible";
					return 0;
				}
				flag=1;
				cnt+=n/2-i;
			}else if(s[k]==s[i])
			{
				for(int l=k;l<j;l++)//把s[k]上的字符交换到与s[i]对应的n-i-1即j的位置 
				{
					swap(s[l],s[l+1]);
					cnt++;//统计交换的次数 
				}
				j--;
				break;
			}
		}
	}
	cout<<cnt;
	return 0; 
} 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础练习 完美的代价
    • 问题描述
      • 输入格式
        • 输出格式
          • 样例输入
            • 样例输出
              • 题意理解:
                • 代码:
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档