完美的代价-题解

字典树入门小结 一、基础知识: 树状结构保存字符串,查找快,判断前缀快。 建Trie树:逐一把每则单词的每个字母插入Trie。插入前先看前缀是否存在。如果存在,就共享,否则创建对应的节点和边 struct Trie { int num; Trie *nx[N]; }; num记录该前缀出现的次数,N是分支数,比如小写字母构成的单词的树N就是26,二进制的01编码N就是2 具体建树代码: Trie 阅读详情
基础练习 完美的代价  
时间限制:1.0s   内存限制:512.0MB
      
问题描述
  回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
  交换的定义是:交换两个相邻的字符
  例如mamad
  第一次交换 ad : mamda
  第二次交换 md : madma
  第三次交换 ma : madam (回文!完美!)
输入格式
  第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
  第二行是一个字符串,长度为N.只包含小写字母
输出格式
  如果可能,输出最少的交换次数。
  否则输出Impossible
样例输入
5
mamad
样例输出
3


解题思路:  考察贪心算法
http://blog.youkuaiyun.com/andywxy/article/details/1904151 (参考)

源码(JAVA):
package test;
import java.util.Scanner;


/**
 *   
 *   完美代价
 * 
 */
public class Asist
{
private static int change = 0;              // 改变的次数

private static int old = 0;                 // 记录出现奇数次字符
private static char charold = 0;            // 记录奇数字符
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int N = Integer.parseInt(sc.nextLine());
String s = sc.nextLine();
char str[] = s.toCharArray();
         boolean flag = check(str);             //是否可以组成回文
         
         if (!flag)
         {
        System.out.println("Impossible");
         }
         else
         {
        for (int i = 0; i < N/2; i++)
        {
        if (str[i] != charold) // 从右开始找对称
        {   int j = 0;
        for (j = N-1-i; j > i; j--)
        {
        if (str[i] == str[j]) break; // 找到
        }
        change += N-1-i - j;   // 移动次数
        for (int k = j; k < N-1-i; k++)
        {
        str[k] = str[k+1];
        }
        str[N-1-i] = str[i];    //对称点
        }
        else           // 从左边开始
        {
        int j = 0;
        for ( j = i; j < N-1-i; j++)
        {
        if (str[j] == str[N-1-i]) break; //找到
        }
        change += j-i;   //移动次数
        for (int k = j; k > i; k--)
        {
        str[k] = str[k-1];
        }
        str[i] = str[N-1-i];    // 对称点
        }
        }
        System.out.println(change);
         }
}


private static boolean check(char[] str)
{
int arr[] = new int[26];
for (int i = 0; i < str.length; i++)
{
arr[str[i]-'a']++;
}

for (int i = 0; i < 26; i++)
{
if (arr[i] % 2 == 1)
{
old++;
charold = (char) (i+'a');
}
}

if (old > 1) return false;
return true;
}
}

【报错解决】OpenClaw 报错 Unsupported engine: requires node >=22.0.0 —— Node.js 版本过低的完整排查与解决实录 在国产操作系统环境下部署OpenClaw时遇到"Unsupported engine: requires node >=22.0.0"报错,分析表明该工具要求Node.js 22+以支持fetch API等新特性。解决方案包括:1) 使用nvm升级Node至22+版本;2) Docker环境中改用node:22-alpine镜像;3) 不推荐强制忽略引擎检查。文章强调遵循引擎要求的重要性,指出环境版本是工程化体系稳定运行的关键,建议通过规范升级解决兼容性问题。(149字) 阅读详情

相关推荐

NVIDIA NCCL 源码解析:从XML拓扑到高性能通信图的构建

本文深入解析了NVIDIA NCCL如何将XML硬件拓扑文件转化为高性能通信图的核心过程。详细阐述了从创建CPU、GPU、NIC等节点,到建立PCIe、NVLink连接,再到计算链路带宽并进行关键排序的完整建图流程。该图是NCCL实现最优通信路径规划、充分发挥NVLink等高速互联性能的基石,直接影响分布式深度学习训练的效率。

convnet3designer的博客 306

C语言小知识点

1.str[i] - '0' 如果str里面存放的是数字字符的话就是转成其数值类型 比如说str[i]是'1',其实ascii码值为0x31,而'0'的ascii码是0x30,用str[i]-'0'就得到了1

lswaone的博客 2438

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 341

字典树

字典树,之前没接触觉得好高大上,做了两道模板题

u013628265的博客 540

SpringBoot使用mybatis-plus的自动代码生成器

一.SpringBoot使用mybatis-plus+自动代码生成 使用mybatis-plus可以自动帮我们生成通用的 controller,service,dao,mapper 二.加入依赖 <!-- MP 核心库 --> <dependency> <groupId>com.baomidou</groupId> <artif...

农民娃儿的博客 2262

ROS专栏—基于STM32F103的INA219电源数据采集

文章主要记录了stm32f103对ina219的数据采集

热爱生活、奋斗前行 2352

C语言字符串面试相关函数

第一节、字符串查找 1.1题目描述: 给定一个字符串A,要求在A中查找一个子串B。 如A="ABCDF",要你在A中查找子串B=“CD”。 分析:比较简单,相当于实现strstr库函数,主体代码如下: //在字符串中查找指定字符串的第一次出现,不能找到则返回-1       int strstr(char *string, char *substring)

masic007のlogs 1584

S32K344 Flash Driver实战:手把手教你实现任意字节写入与扇区解锁(含C40_Ip避坑指南)

本文深入解析S32K344微控制器的Flash驱动开发,重点解决C40_Ip驱动库的8字节对齐限制和扇区保护锁问题。通过实战案例和代码示例,详细介绍了如何实现任意字节写入、扇区解锁及性能优化策略,为Bootloader和OTA升级等应用提供可靠解决方案。

weixin_33713707的博客 432

蓝桥杯练习题——完美的代价(python题解)全部通过

问题分析: 关键是要找到贪心策略。对于这一题来说,首先判断这个字符串能不能够经过交换变成完美的回文字符串,满足条件后每一步都使用贪心策略。 ①判断: 若字符串长度为偶数,则每个字符出现的次数都必须是偶数次,否则不对称 若字符串长度为奇数,则只能有一个字符出现奇数次(在字符串最中间出现一次) 判断实现比较简单,注意减少代码复杂度(题给字符串长度范围是8000,python很容易运行超时) ②贪心策略: 对于偶数长度的字符串,我们从第一个开始遍历,再倒序遍历出同样的,这个倒序遍历出来的序号,就是该移动的步数。

hallohalloha的博客 5309

Qt Creator配置MSVC编译环境、调试环境

获取和安装:cdb.exe 在 Debugging tools for Windows 中,而现在已经不单独提供下载,只在Windows SDK 或者Windows Driver Kit里面包含 所以需要下载微软的调试工具,最少需要下载 Windows SDK。在windows上开发,一般使用Qt Creator自带mingw编译器,编译和调试都很方便,安装Qt时勾选后,自动配置完毕。但是有时候我们需要使用MSVC的编译器,这个时候我们没法直接使用,需要配置环境才能使用,以下是配置方案。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 6986

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2128

完美的代价-题解(C++代码)超详细解释

题目描述: 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma 第三次交换 ma : madam (回文!完美!) 输入: 第一行是一个整数N,表示接下来的字符串的长度(N < = 8000) 第二行是一个字符串,长度为N.只包含小写字母

m0_46549788的博客 709

成功解决raise Py4JError py4j.protocol.Py4JError: py4j.protocol.Py4JError: Could not find py4j jar at 

成功解决raise Py4JError("Could not find py4j jar at {0}".format(jarpath)) py4j.protocol.Py4JError: Could not find py4j jar at 目录 解决问题 解决思路 解决方法 1、第一步安装jdk 2、第二步安装或升级py4j 解决问题 raise Py4JError("Could not find py4j jar at {0...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4624

java完美回文串的代价_[蓝桥杯][基础练习VIP]完美的代价-题解(Java代码)

思路:回文字符串就是 字符从字符串成中间折叠对称的字符串。* 如:abdba、abcdcba....等等。* 我们会发现一个规律,每一个字符都是成对存在、除了中间的那一个字符,其他的都是成对存在。* 因此,我们可以用这个特性判断该字符串是否可以构成回文字符串-->实现方法tally* 我们确定可以该字符串可以构成回文字符串后,接下来就是对没有形成回文字符串的字符进行移动...

weixin_28956753的博客 312

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

蓝桥杯基础练习超全习题题解VIP版——BASIC-14~19(时间转换、字符串对比、分解质因数、矩阵乘法、矩形面积交、完美的代价)

每日刷题(二十九) 1.阶乘计算 蓝桥杯基础训练超全习题题解——BASIC-30.阶乘计算

Atticus的博客 483

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python基础编程题会员非会员,[蓝桥杯][基础练习VIP]完美的代价-题解(Python代码)错误9...

错误9%、实在是不知道为什么。n=int(input())s=list(input())s1=s[::-1]total=0"""判断是否可以做回文串"""defcheck(S):count=0iflen(S)%2==0:forsinS:ifS.count(s)!=2:returnFalseelse:forsinS:ifS.count(s)!=2:...

weixin_32871457的博客 166

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【蓝桥】基础练习 完美的代价

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

C_xixixixi的博客 315

蓝桥杯 基础练习 完美的代价 (vip)附解析

基础练习 完美的代价 解析://贪心算法 先将 i 从第一个字符从前往后遍历,将 j 从后往前遍历,若找到 s [ i ] 与 s [ j ] 相同的字符,将 s [ j ] 交换到最后一个字符,再进行下一个循环,从第二个字符到倒数第二个字符遍历。 此时,要考虑不存在的情况: ① 若 n 为偶数,且有一个字符出现的次数为奇数。 ②若 n 为奇数,已经出现一个次数为奇数的字符,又出现一...

Qi2456的博客 702

[蓝桥杯]完美的代价

问题 1467: [蓝桥杯][基础练习VIP]完美的代价 时间限制: 1Sec 内存限制: 128MB 提交: 261 解决: 73 题目描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : ...

DanBo_C的博客 498

tsinsen A1043. 完美的代价

A1043. 完美的代价 时间限制:1.0s   内存限制:512.0MB   总提交次数:1985   AC次数:446   平均分:44.86 问题描述   回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。   交换的定义是:交换两个

clover_hxy的博客 931

1705: 完美数组(New Online Judge)

删去数字的代价为删去数字中的最大值。例如1 2 2 3 4 4删去数字1和3变成2 2 4 4,代价为3。现在,给你两个长度为n的数组,恰好每个数字出现2次,你可以删去一些数字,使得这两个数组变成完美数组。2、从左往右每两个数字都必须是一样的,即A、A、B、B、C、C…例如:2 2 4 4 6 6 7 7是一个长度为8的完美数组。接下来两行每行n个数字,分别表示给定的两个数组。请问将这两个数组变成完美数组的最小代价是多少?删去数字时,无法改变其他数字的相对位置。输出一个数字,表示最小代价。

lulutoy的博客 946

回文字符串 完美的代价

那么在思考,在进行这一步变换的最终结果中,实际上是可以看成将符合条件的字符移到了需要变换的left或者right的位置,就可以使用动态数组快速的变换过来,那么在这个变化过程中交换的次数实践上就是初始点的位置到目标点的距离,在进行累加即可得到最终的结果。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。这个题目文档是将字符串变成回文子串的最少交换次数,这是一个贪心问题,我们需要思考,怎么样才能保证他得到的交换次数是最小的,那么就是不能有浪费的交换次数。

m0_71859701的博客 1182

2023 GPLT 天梯赛 L3-035 完美树 —— 树形DP,状态机,贪心

GPLT 天梯赛 L3-035 完美树 题解 树形DP

lamujiaolian的博客 2334

完美的代价

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

baidu_30009421的博客 141

蓝桥杯-基础训练-完美的代价

完美的代价 问题的分析及思路 思路一 首先是如何判断其能不能成为回文串 再进行回文处理 pass,因为先去判断是否为回文数,就需要遍历字符串两层,太浪费了,一定更好的方法 思路二 这个思路是我自己在纸上手写的时候发现的 首先当我判断为回文串的时候,是从将第一个字符与最后一个字符相比,即这样的对应关系, 当两侧的字符一致时,再去判断第二位与倒数第二位,以此类推 如果均相同,则为回文串 故又根...

奥利波德的魔法屋 273

完美的代价、矩形面积交、矩阵乘法、分解质因数

采用局部最优解思路(又称贪心思想),从尾部寻找能与头部元素能匹配的第一个,然后直接移动到最后,使得这两个字母对称,以此类推。利用矩阵的性质相乘即可,三层循环相乘,因为每一层需要计算n次,顺便对0次阶特判一下即可。利用交集性质直接求解即可,即最小值大于最大值并且最大值大于最小值。本题数量级1e4,暴力求解即可,质因数的常规求解。

weixin_66405733的博客 335
上一篇: 数的读法-题解
下一篇: 匪警请拨110—题解
慕一春
博客等级 码龄12年 19粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值