您现在的位置是:首页 > 编程 > 

试题 基础练习 完美的代价

2025-07-22 04:21:51
试题 基础练习 完美的代价 试题 基础练习 完美的代价资源限制 内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:.0s Python时间限制:5.0s 问题描述   回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。   交换的定义是:交

试题 基础练习 完美的代价

试题 基础练习 完美的代价

资源限制 内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:.0s Python时间限制:5.0s 问题描述   回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。   交换的定义是:交换两个相邻的字符   例如mamad   第一次交换 ad : mamda   第二次交换 md : madma   第三次交换 ma : madam (回文!完美!) 输入格式   第一行是一个整数,表示接下来的字符串的长度( <= 8000)   第二行是一个字符串,长度为.只包含小写字母 输出格式   如果可能,输出最少的交换次数。   否则输出Impossible 样例输入 5 mamad 样例输出 提交代码

代码语言:javascript代码运行次数:0运行复制
#include<iostream>
using namespace std;

int main()
{
    int n, flag=0, swap_cnt=0;
    cin>>n;
    string str;
    cin>>str;
    for(int i=0; i<n-1; i++)
	{
        for(int j=n-1; j>=i; j--) //从右往左进行匹配
		{
            if(j==i)  //没有匹配的字母
			{
                if(flag==1||str.size()%2==0)
				{
                    cout<<"Impossible"<<endl;
                    return 0;
                }
                flag=1;
                swap_cnt+=str.size()/2-i; //计算单个字母的交换次数
            }
			else if(str[i]==str[j])  //匹配到位置时
			{
                for(int k=j; k<n-1; k++)
				{
                    swap(str[k], str[k+1]); //将位置进行交换
                    swap_cnt++;  //累计交换次数
                }
                n--;  //每搜索完一次后,相应匹配的字母放在最右边。下次搜索从n-1的位置,从右往左匹配。
                break; 
            }
        }       
    }
    cout<<swap_cnt<<endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022-11-06,如有侵权请联系 cloudcommunity@tencent 删除字符串swap基础内存搜索

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1156041.html

相关标签:无
上传时间: 2025-07-20 06:35:02
留言与评论(共有 20 条评论)
本站网友 哈尔滨装修公司排名
24分钟前 发表
madam (回文!完美!) 输入格式   第一行是一个整数
本站网友 团123
0秒前 发表
输出最少的交换次数
本站网友 宝盛里观林园
8分钟前 发表
madma   第三次交换 ma
本站网友 gis帝国
17分钟前 发表
请你计算最少的交换次数使得该串变成一个完美的回文串
本站网友 重庆农家乐网
29分钟前 发表
swap_cnt=0; cin>>n; string str; cin>>str; for(int i=0; i<n-1; i++) { for(int j=n-1; j>=i; j--) //从右往左进行匹配 { if(j==i) //没有匹配的字母 { if(flag==1||str.size()%2==0) { cout<<"Impossible"<<endl; return 0; } flag=1; swap_cnt+=str.size()/2-i; //计算单个字母的交换次数 } else if(str[i]==str[j]) //匹配到位置时 { for(int k=j; k<n-1; k++) { swap(str[k]
本站网友 virtualbox官网
11分钟前 发表
从右往左匹配
本站网友 怎么样除皱
28分钟前 发表
madam (回文!完美!) 输入格式   第一行是一个整数
本站网友 我国著名的赵州桥建于哪个朝代
14分钟前 发表
试题 基础练习 完美的代价 试题 基础练习 完美的代价资源限制 内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:.0s Python时间限制:5.0s 问题描述   回文串
本站网友 218219
2分钟前 发表
它从左往右读和从右往左读是一样的
本站网友 25000日元
24分钟前 发表
请你计算最少的交换次数使得该串变成一个完美的回文串
本站网友 发际线
11分钟前 发表
  交换的定义是:交换两个相邻的字符   例如mamad   第一次交换 ad
本站网友 首创新悦都
22分钟前 发表
分享自作者个人站点/博客
本站网友 广宇上东城
10分钟前 发表
相应匹配的字母放在最右边
本站网友 香蜜湖租房
6分钟前 发表
madma   第三次交换 ma
本站网友 合肥二手房网
24分钟前 发表
mamda   第二次交换 md
本站网友 南山租房网
2分钟前 发表
它从左往右读和从右往左读是一样的
本站网友 杭州魅力金座
19分钟前 发表
madam (回文!完美!) 输入格式   第一行是一个整数
本站网友 挤奶门
15分钟前 发表
mamda   第二次交换 md
本站网友 鼠标拖尾
18分钟前 发表
下次搜索从n-1的位置