当前位置: 首页 > news >正文

​LeetCode解法汇总2337. 移动片段得到字符串

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给你两个字符串 start 和 target ,长度均为 n 。每个字符串  由字符 'L''R' 和 '_' 组成,其中:

  • 字符 'L' 和 'R' 表示片段,其中片段 'L' 只有在其左侧直接存在一个 空位 时才能向  移动,而片段 'R' 只有在其右侧直接存在一个 空位 时才能向  移动。
  • 字符 '_' 表示可以被 任意 'L' 或 'R' 片段占据的空位。

如果在移动字符串 start 中的片段任意次之后可以得到字符串 target ,返回 true ;否则,返回 false 。

示例 1:

输入:start = "_L__R__R_", target = "L______RR"
输出:true
解释:可以从字符串 start 获得 target ,需要进行下面的移动:
- 将第一个片段向左移动一步,字符串现在变为 "L___R__R_" 。
- 将最后一个片段向右移动一步,字符串现在变为 "L___R___R" 。
- 将第二个片段向右移动散步,字符串现在变为 "L______RR" 。
可以从字符串 start 得到 target ,所以返回 true 。

示例 2:

输入:start = "R_L_", target = "__LR"
输出:false
解释:字符串 start 中的 'R' 片段可以向右移动一步得到 "_RL_" 。
但是,在这一步之后,不存在可以移动的片段,所以无法从字符串 start 得到 target 。

示例 3:

输入:start = "_R", target = "R_"
输出:false
解释:字符串 start 中的片段只能向右移动,所以无法从字符串 start 得到 target 。

提示:

  • n == start.length == target.length
  • 1 <= n <= 105
  • start 和 target 由字符 'L''R' 和 '_' 组成

解题思路:

* 解题思路:

* 找到字符串,每个位置上的字符按照下面的规则来判断即可。

* 1.顺序一样

* 2.L左侧空格的数目,start要大于target

* 3.R右侧空格的数组,target要大于start

代码:

class Solution2337
{
public:vector<pair<char, int>> makePiarList(string s){vector<pair<char, int>> v;int blankNum = 0;int index = 0;while (index < s.length()){if (s[index] == '_'){blankNum++;}else if (s[index] == 'L'){v.push_back(make_pair('L', blankNum));}else{v.push_back(make_pair('R', blankNum));}index++;}return v;}bool canChange(string start, string target){vector<pair<char, int>> startList = makePiarList(start);vector<pair<char, int>> targetList = makePiarList(target);if (startList.size() != targetList.size()){return false;}if (startList.size() == 0){return true;}// start中总的空格数量int startBlankSum = startList[startList.size() - 1].second;// target中总的空格数量int targetBlankSum = startList[startList.size() - 1].second;for (int i = 0; i < startList.size(); i++){// 顺序应该一致if (startList[i].first != targetList[i].first){return false;}if (startList[i].first == 'L'){if (startList[i].second < targetList[i].second){return false;}continue;}if (startList[i].first == 'R'){if (startBlankSum - startList[i].second < targetBlankSum - targetList[i].second){return false;}continue;}}return true;}
};

http://www.lryc.cn/news/139320.html

相关文章:

  • Fpass与Fstop
  • Java快速入门体验
  • 父组件传给子组件的数据是异步的,为什么会导致子组件比父组件先执行?
  • 泛型编程 学习笔记
  • 电脑文件删除了可以找回吗?分享一种简单恢复删除电脑文件办法!
  • Pygame编程(4)event模块
  • Python数据采集实战-使用BeautifulSoup框架解析HTML文档并提取所需内容(附源码和实现效果)
  • Java“牵手”天猫商品列表数据,关键词搜索天猫商品数据接口,天猫API申请指南
  • idea切换Git分支时保存未提交的文件
  • Qt串口通信学习文档
  • 018-时间处理库,预处理
  • Sketch 98 中文版-mac矢量绘图设计
  • Springboot继承Keycloak实现单点登陆与退出
  • 天眼查接口 查询企业信息API 企查查接口
  • Linux 网络编程 和 字节序的概念
  • unet pytorch
  • 前置微小信号放大器的作用是什么
  • 一百六十五、Kettle——用海豚调度器调度Linux资源库中的kettle任务脚本(亲测、附流程截图)
  • xfs ext4 结合lvm 扩容、缩容 —— 筑梦之路
  • 如何修改由 img 标签引入的 svg 图片颜色 (react环境)
  • 归一化的作用,sklearn 安装
  • 半导体企业如何进行跨网数据传输,又能保护核心数据安全?
  • lvs-DR模式:
  • Delphi 开发手持机(android)打印机通用开发流程(举一反三)
  • nodejs替换模版中${}的内容
  • 【快速傅里叶变换(fft)和逆快速傅里叶变换】生成雷达接收到的经过多普勒频移的脉冲雷达信号(Matlab代码实现)
  • 嵌入式学习之linux
  • 自动驾驶合成数据科普一:不做真实数据的“颠覆者”,做“杠杆”
  • 云服务器 宝塔(每次更新)
  • 【学习FreeRTOS】第16章——FreeRTOS事件标志组