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

news/2024/7/1 2:46:13

目录链接:

力扣编程题-解法汇总_分享+记录-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://lihuaxi.xjx100.cn/news/1469336.html

相关文章

看完天才少年稚辉君智元机器人发布会后的一点感受

(点击即可收听) 智辉君&#xff0c;在科技圈里是一位非常有名的技术大佬&#xff0c;华为天才少年&#xff0c;年入百万招入&#xff0c;破圈于B站 人称科技圈里的野生钢铁侠&#xff0c;凡是看过他B站里一些科技硬核作品&#xff0c;外行人看了直呼666&#xff0c;内行人看了惊…

Exchange Online Archiving for Exchange Online部署方案

目录 前言 一、环境准备 二、计划和设计 三、创建存档邮箱 四、配置存档策略

vscode配置调试环境-linux系统

1.检查环境 1.1检查gcc,g 根据自己所需gcc或者g环境&#xff0c;进行检查&#xff1a; 如果没有gcc或者g环境&#xff0c;需要下载 which gcc 1.2检查gdb 如果没有该环境&#xff0c;则需要下载 which gdb 2.vsCode创建简单的程序 test.cpp 3.生成文件 3.1生成c_cpp_pr…

element-ui中二次封装一个带select的form组件

带select的form组件 样式 代码 <template><el-form-item label"是否有" class"append" prop"tag"><el-form-itemprop"isShare"><el-select v-model"query.tag"><el-option v-for"(item, …

麦肯锡的AI员工Lilli,上岗了!

知识革命正在咨询行业发生。8月16日&#xff0c;麦肯锡发布了AI员工Lilli。 “知识是麦肯锡的生命力。” "Knowledge is the lifeforce of McKinsey." # # “通过 Lilli&#xff0c;我们可以利用技术来获取和利用我们的全部知识和资产&#xff0c;从而将生产力提高到…

二、8.系统调用、可变参数和堆内存管理

系统调用&#xff1a;让用户进程申请操作系统的帮助 一个系统功能调用分为两部分&#xff0c; 一部分是暴露给用户进程的接口函数&#xff0c;它属于用户空间&#xff0c;此部分只是用户进程使用系统调用的途径&#xff0c;只负责发需求。另一部分是与之对应的内核具体实现&am…

BBS项目day04 文章详情页、点赞点菜、评论功能(根评论和子评论)、评论分页之刷新评论页面

一、路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注册path(register/, views.register)…

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1.关闭防火墙 2.在docker中拉去镜像&#xff0c;运行mysql容器 最后一行是容器的默认id 用docker创建一个新的数据库mysqldb设置密码123456 3.拉去网盘owncloud镜像 4.使用软连接连接mysql 5.测试