当前位置: 首页> 教育> 就业 > 手机app开发软件有哪些_免费游戏链接入口_网络营销顾问_谷歌推广费用多少

手机app开发软件有哪些_免费游戏链接入口_网络营销顾问_谷歌推广费用多少

时间:2025/7/11 19:53:04来源:https://blog.csdn.net/Sti1lWater/article/details/146987053 浏览次数:0次
手机app开发软件有哪些_免费游戏链接入口_网络营销顾问_谷歌推广费用多少

题目描述

在LR字符串中交换相邻字符
给定我们一个只由 ′ L ′ , ′ R ′ , ′ X ′ 'L','R','X' L,R,X 组成的字符串。现在给你两个字符串 s t a r t start start e n d end end,问你能否通过以下两个字符串变换,将字符串 s t a r t start start 变换为 e n d end end

  1. X L → L X XL \rightarrow LX XLLX
  2. R X → X R RX \rightarrow XR RXXR
    如果你观察仔细,你可以从上述两个变换发掘以下两个性质:
  3. L L L 只能向左移动,并且左边的元素必须是 X X X
  4. R R R 只能向右移动,并且右边的元素必须是 X X X

思路1: bfs

T L E TLE TLE
暴力 b f s bfs bfs 的思路比较简单,暴力枚举所有交换即可。
但是超时也是意料之中的,不过我们可以增加一个优化,比如:A*, 剪枝(如果两个字符串的对应字符相同就不需要交换)等尽可能多得分。

思路2:双指针

首先,无论怎么移动,由于 L L L R R R 无法互相穿过对方,那么去掉 X X X 后的剩余字符应该是相同的,否则返回 f a l s e false false
然后, s t a r t start start L L L 的位置一定在target中对应的 L L L 的右侧或者在同一位置
s t a r t start start R R R 的位置一定在 t a r g e t target target 中对应的 R R R 的左侧或者在同一位置(参见题目描述中的性质)
那么,接下来我们就用双指针遍历 s t a r t [ i ] start[i] start[i] t a r g e t [ j ] target[j] target[j],找到 s t a r t [ i ] start[i] start[i] t a r g e t [ j ] target[j] target[j] 都不位 ‘X’ 的字符,判断它们的相对位置

分类讨论:
如果当前字符为 L L L i < j i<j i<j,那么这个 L L L 由于无法向右移动,返回 f a l s e false false
如果当前字符为 R R R i > j i>j i>j,那么这个 R R R 由于无法向左移动,返回 f a l s e false false
遍历完,若中途没有返回 f a l s e false false 就返回 t r u e true true

双指针代码

class Solution {
public:bool canChange(string start, string target) {auto s = start, t = target;// remove是将匹配的元素都放在后面,返回匹配的第一个元素的迭代器,然后erase删除迭代器s.erase(remove(s.begin(), s.end(), '_'), s.end());t.erase(remove(t.begin(), t.end(), '_'), t.end());// 判断删除后长度和相对顺序,若不同则返回falseif (s != t) return false;for (int i = 0, j = 0; i < start.length(); ++i) {if (start[i] == '_') continue;while (target[j] == '_') ++j;// 若i=j,则说明一定匹配(因为在for循环上面的判断中保证了相对顺序)// 若L:则它不能向右移动 i < j// 若R:则它不能向左移动 j < iif (i != j && (start[i] == 'L') == (i < j)) return false; // 一行判三种情况++j;}return true;}
};

相似题目

移动片段得到字符串

关键字:手机app开发软件有哪些_免费游戏链接入口_网络营销顾问_谷歌推广费用多少

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: