小红的回文串构造

news2024/9/24 17:19:55

本题链接:登录—专业IT笔试面试备考平台_牛客网

题目:

样例1:

输入
abba

输出
baab

样例2:

输入
aba

输出
-1

思路:

        由题意,题目保证给出的字符串是回文串的,所以我们只需要获取两个不同的字符的对应对称的两个坐标进行交换即可构造完毕。

        这里有一个关键点,就是我们如何知道当前的下标 i 的堆成下标是多少?

        关于 i 对称的下标,肯定有一个规律关系,其中对称又有两种方式。

        其中奇数串对称:

奇数串对称:    dcabacd            偶数串对称:dcabbacd
	          1234567                      12345678

        观察对应的下标 i 就可以找出一定的规律为 : 

当前的下标 i 的对称下标 j  一定为:

   j = (s.length() % 2 ?  i + (s.length() / 2 - i) * 2: i + (s.length() / 2 - i) * 2 - 1);


   奇数串的时候 :   j =   i + (s.length() / 2 - i) * 2
   偶数串的时候 :   j =   i + (s.length() / 2 - i) * 2 - 1
    

        所以结合以上规律即可构成出答案了。

        这里也有个小细节,就是我们只需要遍历回文串的一半即可。

        否则会将奇数串中的对称点也作为第二个不同的字符。

        代码详解如下:

#include <iostream>
#include <cstring>
using namespace std;

// 用于存储不同的字符
struct Char
{
    char now;
    int i;    // 当前下标 i
    int j;    // 对称下标 j
    inline Char():now('-'),i(-1),j(-1){}    // 默认构造函数
};
signed main()
{
    string s;
    getline(cin,s);
    int sz = s.size();    // 获取字符串长度
    
    if(sz <= 3)
    {
        cout << -1 << endl; // 特判如果 小于等 3 那么一定是无解
        return 0;
    }
    
    Char a,b;    // 定义结构体用于存储两个不同的字符
    for(int i = 0;i < sz / 2;++i)    // 遍历对应回文串的一半即可
    {
        // 如果 a 还没存储好,我们现在给它存储
        if(a.now == '-')
        {
            a.now = s[i];
            a.i = i;
            // 存储对称下标 j
            a.j = (sz % 2 ? i + (sz / 2 - i) * 2 : i + (sz / 2 - i) * 2 - 1);    
        }else
        {
            if(b.now == '-' and s[i] != a.now)    // 出现不同 a 的字符
            {
                b.now = s[i];
                b.i = i;
                // 存储对称下标 j
                b.j = (sz % 2 ? i + (sz / 2 - i) * 2 : i + (sz / 2 - i) * 2 - 1);  
                break;    // 两个都存储完了推出循环
            }
        }
    }
    
    if(a.now == '-' || b.now == '-')
    {
        cout << -1 << endl;    // 如果没有第二个不同的字符,那么肯定无解
        return 0;
    }
    
    // 开始交换两个字符
    s[a.i] = s[a.j] = b.now;
    s[b.i] = s[b.j] = a.now;
    
    // 输出答案,即为使其中任意一个解
    cout << s << endl;
    
    return 0;
}

最后提交:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1420667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android App开发基础(2)—— App的工程结构

本专栏文章 上一篇 Android开发修炼之路——&#xff08;一&#xff09;Android App开发基础-1 2 App的工程结构 本节介绍App工程的基本结构及其常用配置&#xff0c;首先描述项目和模块的区别&#xff0c;以及工程内部各目录与配置文件的用途说明&#xff1b;其次阐述两种级别…

状态码400以及状态码415

首先检查前端传递的参数是放在header里边还是放在body里边。 此图前端传参post请求&#xff0c;定义为’Content-Type’&#xff1a;‘application/x-www-form-urlencoded’ 此刻他的参数在FormData中。看下图 后端接参数应为&#xff08;此刻参数前边什么都不加默认为requestP…

仅4步,彻底玩转如何在Word中插入页脚数字

Word中首页无需添加数字&#xff0c;从第二页开始添加数字。 Step 1&#xff1a;如下图&#xff0c;将内容设定为如下&#xff0c;“首页不同”一定要选中&#xff1b; Step 2&#xff1a;选择工具栏中的“页码”&#xff1b; Step 3&#xff1a;接下来选择“页码”下的“设置…

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使用该工具造成的损失,和本人及开发者…

2024 年, Web 前端开发趋势

希腊哲学家赫拉克利特认为&#xff0c;变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域&#xff0c;新技术、开发趋势、库和框架不断涌现&#xff0c;变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

数据分析-28-小红书消费情况分析(包含代码和数据)

文章目录 0. 代码数据下载1. 项目介绍2. 数据说明3. 分析目的1. 提出问题&#xff1a;哪些消费群体更庞大&#xff0c;平均购买力更强&#xff1f;已知自变量能否准确预测用户购买金额&#xff1f;a. 数据导入b. 去除重复数值和缺失数值c. 简化部分columns的命名&#xff0c; 方…

15EG使用vivado2021.1实现LWIP的网络传输

创建工程模板在hello_world中已经介绍过了&#xff0c;这里直接从配置完zynq ip核开始&#xff0c;由于使用vivado的版本不同&#xff0c;配置ZYNQ时需要用到的tcl文件我会放在工程文件夹下的file文件夹中 配置好IP核后&#xff0c;右键设计模块&#xff0c;点击Generate Outpu…

实际项目中的SpringAOP实现日志打印

目录 一、AOP实现日志 1.1 需求分析&#xff1a; 1.2 定义切面类和切点&#xff1a; 扩展&#xff1a;finally中的代码块一定会执行吗&#xff1f; 扩展 总结 1.3 定义环绕通知 1.4 handleBefore 的具体实现 1.4.1 获取url 1.4.2 获取接口描述信息 1.4.3 后续获取 1.5…

【美赛获奖必看】史上最强最全美赛论文模板,word+latex

大家好呀&#xff0c;现在是1.30日&#xff0c;距离2024美赛只有短短两天时间啦&#xff0c;众所周知&#xff0c;美赛对于论文排版是非常看重的&#xff0c;一个好的论文排版往往可以起到事半功倍的效果&#xff0c;而如果论文不美观&#xff0c;即便建模求解等都不错&#xf…

u盘文件防止拷贝的方法

在企业的日常运营中&#xff0c;U盘作为一种常用的移动存储设备&#xff0c;常常被用于数据的传输和备份。然而&#xff0c;U盘的不当使用也可能导致企业数据的泄露&#xff0c;给企业带来巨大的风险。 为了保护企业数据的安全&#xff0c;使用域智盾等软件工具进行U盘文件防拷…

【优选算法系列】【专题三二分查找】第二节.852. 山脉数组的峰顶索引和162. 寻找峰值

文章目录 前言一、山脉数组的峰顶索引 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、寻找峰值 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

【Coding】寒假每日一题Day.8. 超级胶水

题目来源 题目来自于AcWing平台&#xff1a;https://www.acwing.com/problem/content/2871/。 以blog的形式记录程序设计算法学习的过程&#xff0c;仅做学习记录之用。 题目描述 输入输出格式 范围 样例 思路 思路参考自闫总的视频题解。 与区间合并不同&#xff0c;此处…

为爱穿针 用冬日针爱温暖孩子——Home尧泰汉海慈善专项基金“益起暖冬”公益行动圆满结束

2024年1月15日&#xff0c;Home尧泰汉海四季有爱•益路向阳之“益起暖冬”公益行动圆满结束&#xff0c;本次公益活动由重庆市慈善总会、Home尧泰汉海慈善专项基金、重庆市渝中区红樱桃义工协会主办。 千丝万缕汇针爱 五湖四海显温情 用公益的针线编织爱的温暖 让孩子的冬日沐…

字符串转码-第11届蓝桥杯国赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第35讲。 字符串转码&#…

PawSQL更新 | 新增18个SQL性能审核重写规则

PawSQL最新版本针对DML和DQL新增了审核和重写优化规则共计33个&#xff0c;整体的规则数目达到了83个&#xff0c;覆盖了正确性&#xff0c;安全性、可维护性、性能四个方面的SQL质量问题&#xff0c;并提供了优化建议&#xff0c;已经形成比较完善的针对数据操作的SQL质量审查…

动态规划之买卖股票问题(篇三)(买卖股票的最佳时机)

本篇博客主要讲解309.最佳买卖股票时机含冷冻期和714.买卖股票的最佳时机含手续费&#xff0c;这也是股票系列的最后一篇讲解。 309.最佳买卖股票时机含冷冻期 题目&#xff1a; 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算…

SpringBoot---创建项目

介绍 此项目SpringBoot使用的是2.6.1版本&#xff0c;由于这个项目使用的是maven聚合方式创建的&#xff0c;所以第二步是我在聚合方式下需要添加的依赖&#xff0c;完整的pom.xml内容放到了最下面。 第一步&#xff1a;创建Maven项目 这个里什么也不勾选&#xff0c;直接点…

<网络安全>《9 入侵防御系统IPS》

1 概念 IPS&#xff08; Intrusion Prevention System&#xff09;是电脑网络安全设施&#xff0c;是对防病毒软件&#xff08;Antivirus Programs&#xff09;和防火墙&#xff08;Packet Filter, Application Gateway&#xff09;的补充。 入侵预防系统&#xff08;Intrusio…

PMP成绩查询及电子版证书下载

PMP项目管理--学习专栏https://blog.csdn.net/xmws_it/category_10954848.html?spm1001.2014.3001.5482 2023年11月25日PMP考试成绩今日凌晨开始发布&#xff0c;按照往年的情况&#xff0c;成绩都是分批出的&#xff0c;如果暂时没查到成绩的同学请耐心等待&#xff0c;预计…

【webrtc】m98 : vs2019 直接构建webrtc及moduletest工程 2

字数有限制,我们继续 【webrtc】m98 : vs2019 直接构建webrtc及unitest工程 1modules_unittests 构建 Build started... 1>------ Build started: Project: modules_unittests, Configuration: GN Win32 ------ 1>ninja: Entering directory `G:\CDN\rtcCli\m98\src\o…