ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

题解:Mirror Mirror

2021-10-06 20:02:27  阅读:163  来源: 互联网

标签:le 题解 Mirror rev rm 字符串 操作 回文


Problem Statement

设一个字符串 \(U\) ,则 \(\rm U[l : r]\) 表示 \(U\) 中第 \(l\) 个到第 \(r\) 个字符形成的子串,\(\rm rev (U)\) 表示将字符串 \(U\) 反转后的结果。

给你一个长度为 \(N\) 的字符串 \(S\) 和一个长度为 \(M\) 的字符串 \(T\) 。

现在可以对字符串 \(S\) 进行如下两个操作,每种操作可以使用任意的次数,整串操作可以在任意顺序下进行:

  • 选择 \(1\le i \le |S|\) ,将 \(S\) 换成 \(\rm S[1 : i] + rev(S[1 : i])\) 。
  • 选择 \(1\le i \le |S|\) ,将 \(S\) 换成 \(\rm rev(S[i : |S|]) + S[i : |S|]\) 。

判断是否可以在如上条件下将 \(S\) 变成 \(T\) 。

若不可以,输出 \(-1\) ,若可以,输出最小的操作次数。

Constrainst

  • \(1\le N, M \le 5 \times 10 ^ 5\)
  • \(S\) 和 \(T\) 由小写字母组成。
  • \(S \neq T\)
  • \(N\) 和 \(M\) 是整数。

solution

首先判断一定无解的情况,trivial 的情况如下:

  • \(S \neq T\) ,\(T\) 的长度为奇数。
  • \(S \neq T\) ,\(T\) 不是回文串。

发现第一次操作比较特殊,考虑其他建立于回文串的操作的性质。

首先,由于是回文串,第一种操作选择 \(i\) ,那么必然有一个第二种操作与其等价,所以只需考虑第一种操作即可。

由于生成的串原来也是回文串,所以设串的长度为 \(2L\) ,那么最优情况下,会选择大于 \(L\) 的 \(i\) 进行操作。

因为若选择小于 \(L\) 的 \(i\) ,这样得到的结果在上一步中也可以一步完成,是一种浪费。

那么现在有一个很有用的性质,那就是操作时候的串会不断增长。

由于是回文串,我们只考虑 \(S\) 前一半的东西,那么每次的操作就如下图:

<iframe> Untitled Diagram.drawio.html <meta charset="utf-8"/> <body> </iframe>

标签:le,题解,Mirror,rev,rm,字符串,操作,回文
来源: https://www.cnblogs.com/Ax-Dea/p/15373985.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有