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

6.1 模拟专题:LeetCode 1576. 替换所有的问号

1. 题目链接

LeetCode 1576. 替换所有的问号


2. 题目描述

给定一个仅包含小写字母和问号 '?' 的字符串 s,要求将所有 '?' 替换为任意小写字母,使得替换后的字符串中 没有相邻的两个字符相同
示例

  • 输入:s = "?zs" → 输出:"azs"(第一个 '?' 替换为 'a')。
  • 输入:s = "ubv?w" → 输出:"ubvaw"'?' 替换为 'a')。

3. 示例分析
  1. 简单替换
    • 输入:"a?b" → 输出:"acb"'?' 替换为 'c')。
  2. 边界处理
    • 输入:"??" → 输出:"ab"(两个 '?' 分别替换为 'a''b')。
  3. 复杂替换
    • 输入:"a?a" → 输出:"aba"(中间的 '?' 替换为 'b')。

4. 算法思路

核心思想

  1. 遍历字符串
    • 从左到右逐个字符处理,遇到 '?' 时进行替换。
  2. 字符选择策略
    • 'a''z' 依次尝试,选择第一个满足以下条件的字符:
      • 与左侧字符不同(若存在)。
      • 与右侧字符不同(若存在)。
  3. 左右判断
    • 每次替换只关注当前字符的左右邻居,确保局部最优,从而保证全局最优。

时间复杂度:O(n * 26) → O(n),其中 n 为字符串长度。
空间复杂度:O(1),无需额外空间。


5. 边界条件与注意事项
  1. 边界处理
    • '?' 位于字符串开头时,只需保证与右侧字符不同。
    • '?' 位于字符串末尾时,只需保证与左侧字符不同。
  2. 字符范围
    • 仅需替换为小写字母 'a'-'z',无需处理其他字符。
  3. 相邻字符冲突
    • 若左右字符相同(如 "a?a"),中间的 '?' 必须选择一个与两者不同的字符。

6. 代码实现
class Solution {
public:string modifyString(string s) {for (int i = 0; i < s.size(); i++) {if (s[i] == '?') {// 遍历 'a'-'z',寻找可替换字符for (char ch = 'a'; ch <= 'z'; ch++) {bool leftOk = (i == 0) || (s[i-1] != ch);   // 左侧无冲突bool rightOk = (i == s.size()-1) || (s[i+1] != ch); // 右侧无冲突if (leftOk && rightOk) {s[i] = ch;break; // 找到第一个可行字符后立即终止}}}}return s;}
};

在这里插入图片描述


关键代码解析

  1. 遍历字符串

    for (int i = 0; i < s.size(); i++)
    
    • 逐个字符检查是否为 '?'
  2. 字符替换逻辑

    for (char ch = 'a'; ch <= 'z'; ch++)
    
    • 'a''z' 依次尝试,找到第一个满足条件的字符。
  3. 条件检查

    bool leftOk = (i == 0) || (s[i-1] != ch);
    bool rightOk = (i == s.size()-1) || (s[i+1] != ch);
    
    • leftOk:若 '?' 在开头,无需检查左侧;否则检查左侧字符是否不同。
    • rightOk:若 '?' 在末尾,无需检查右侧;否则检查右侧字符是否不同。
  4. 替换并终止

    if (leftOk && rightOk) {s[i] = ch;break;
    }
    
    • 找到第一个可行字符后立即替换并跳出循环,保证时间复杂度最优。

与其他解法的对比

方法时间复杂度空间复杂度核心思想
模拟算法O(n)O(1)逐个替换,选择第一个可行字符
预填充法O(n)O(1)预先处理所有 '?' 的位置
随机替换法O(n)O(1)随机选择字符,可能需重试

相关文章:

6.1 模拟专题:LeetCode 1576. 替换所有的问号

1. 题目链接 LeetCode 1576. 替换所有的问号 2. 题目描述 给定一个仅包含小写字母和问号 ? 的字符串 s&#xff0c;要求将所有 ? 替换为任意小写字母&#xff0c;使得替换后的字符串中 没有相邻的两个字符相同。 示例&#xff1a; 输入&#xff1a;s "?zs" →…...

Linux安装go环境

安装一个lazydocker&#xff0c;根据文档需要先安装go环境 https://github.com/jesseduffield/lazydocker 官方文档解析 https://go.dev/doc/install 文档内容如下&#xff0c;一共三步 1.删除先前安装的go&#xff0c;解压下载的go压缩包到/usr/local目录 2.添加环境变量&…...

卡特兰数在数据结构上面的运用

原理 Catalan数是一个数列&#xff0c;其第n项表示n个不同结点可以构成的二叉排序树的数量。Catalan数的第n项公式为&#xff1a; &#xfffc; 其中&#xff0c;&#xfffc;是组合数&#xff0c;表示从2n个元素中选择n个元素的组合数。 Catalan数的原理可以通过以下方式理解&…...

Unity知识点快速回顾系列

Unity知识点快速回顾系列导航 主要想用于快速回顾unity相关知识点&#xff0c;基本只讲解知识点&#xff0c;只有简单的示例&#xff0c;目前还在整理中。 一、C#知识点入门、基础、核心、进阶 二、Unity 知识点入门、基础、核心、进阶 三、Unity 数据持久化 四、Unity 知识点快…...

悟空crm v12安装好后出现 网络错误问题(已解决)

请求网址: http://wwww.aaaa.com/gateway/adminUser/queryUserNumInfo 请求方法: POST 状态代码: 502 Bad Gateway 远程地址: 101.37.79.226:9807 引荐来源网址政策: strict-origin-when-cross-origin...

便携版:随时随地,高效处理 PDF 文件

PDF-XChange Editor Plus 便携版是一款功能强大且极其实用的 PDF 阅读与编辑工具。它不仅支持快速浏览 PDF 文件&#xff0c;还提供了丰富的编辑功能&#xff0c;让用户可以轻松处理 PDF 文档。经过大神优化处理&#xff0c;这款软件已经变得十分轻便&#xff0c;非常适合需要随…...

【Golang】补充:占位符、转义字符、错误处理

&#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;Golang &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 1、占位符 1.1通用占位符 %v &#xff1a;默认格式的值。适…...

文件上传绕过的小点总结(4)

9.末尾点删除处理缺陷 给出源码&#xff1a; $file_name trim($_FILES[upload_file][name]); $file_name deldot($file_name);//删除文件名末尾的点 $file_ext strrchr($file_name, .); $file_ext strtolower($file_ext); //转换为小写 $file_ext str_ireplace(::$DATA,…...

AI比人脑更强,因为被植入思维模型【23】损失规避思维模型

我觉得这是一个很有趣的思维模型。 我们学习一个思维模型&#xff0c;不光是指导自己的思维&#xff0c;其实也可以预测或者思考别人的思维模型&#xff0c;也就是别人会怎么想&#xff0c;怎么做&#xff1f; 定义 三层解释思维模型是一种深入剖析事物本质的思考框架&#x…...

如何用Spring AI构建MCP Client-Server架构

现代 Web 应用正加速与大语言模型(LLMs)深度融合,构建超越传统问答场景的智能解决方案。为突破模型知识边界,增强上下文理解能力,开发者普遍采用多源数据集成策略,将 LLM 与搜索引擎、数据库、文件系统等外部资源互联。然而,异构数据源的协议差异与格式壁垒,往往导致集…...

如何让WordPress不同的页面、栏目显示不同的小工具侧边栏

WooSidebars 是一款用于 WordPress 的插件,主要功能是允许用户根据不同的上下文条件(如特定页面、博客文章、分类目录或搜索结果页面等)来更改侧边栏中显示的小工具。 自定义小工具区域:用户可以轻松创建自定义的小工具区域,并将其设置为在多种条件下显示,只需点击几次即…...

智慧座椅的节能效果如何?

嘿呀&#xff0c;你知道不&#xff0c;咱这叁仟智慧座椅的节能效果&#xff0c;那可是像个神秘小宇宙&#xff0c;根据不同的技术和应用场景&#xff0c;会展现出超有趣的变化哦&#xff0c;下面就给你唠唠常见的几种情况哈&#xff01; 能源回收大变身&#xff1a;有些叁仟智…...

Matlab:二维绘图篇——不同坐标系下的绘图命令

目录 1.极坐标系下绘图&#xff1a;polar命令 实例——极坐标图形 实例——直角坐标与极坐标系图形 2.半对数坐标系下绘图&#xff1a;semilogx和semilogy 实例——半对数坐标系图形 3.双对数坐标系下绘图&#xff1a;loglog 实例——双对数坐标系绘图 4.双y轴坐标&…...

HTTP 协议中请求与响应的详细解析

前言&#xff1a;HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是用于在互联网上传输超文本的协议 --由一个请求和响应组成&#xff0c;一个完整的 HTTP 请求由请求行&#xff08;Request Line&#xff09;、请求头&#xff08;Headers&…...

对三维物体模型的阈值操作

对三维物体模型的阈值操作 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头2. point_normal_x、point_normal_y、point_normal_z有什么区别&#xff1f;3. 去除离群点 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头 dev_open_win…...

prometheus 添加alertmanager添加dingtalk机器人告警

1、dingtalk创建机器人,目前我们采用加白名单的方式校验 2、定位到如下图 test结果如下...

一些题目记录

别人面经题目记录 https://zhuanlan.zhihu.com/p/32626732052 实现 NMS&#xff0c;七八次&#xff0c;很高频&#xff1b; 实现 MultiHeadSelfAttention&#xff0c;大概 三四次&#xff1b; 用 Numpy 或者 List 实现MLP 的前向和反向&#xff0c;4次&#xff1b; Leetcode …...

向量数据库学习笔记(1) —— 基础概念

一、 嵌入模型 Embedding Models 嵌入模型是将复杂数据&#xff08;如文本、图像、音频等&#xff09;转换为向量表示的机器学习模型 1. 核心概念 嵌入(Embedding)&#xff1a;将高维、非结构化的数据映射到低维、稠密的向量空间 向量表示&#xff1a;输出固定长度的数值向量…...

Python学习第二十五天

Scrapy框架 官网概念 Scrapy 是一个强大的 Python 网络爬虫框架。 最新版本学习 安装 pip install scrapy 使用 # 创建名称为myscrapy的爬虫项目 scrapy starpoject myscrapy # 创建爬那个 就是比如 需要爬http://quotes.toscrape.com 运行的名称&#xff1a;toscrape运行…...

GitHub Copilot平替:CodeGeeX 2.0实测报告

本文基于20个真实开发场景对CodeGeeX 2.0进行深度评测&#xff0c;涵盖代码生成质量、上下文理解能力、多语言支持度等关键维度。通过Python数据分析、Java微服务、React前端开发三大核心场景的对比实验&#xff0c;揭示其相比GitHub Copilot在中文语境支持、本地化部署、隐私保…...

【算法】动态规划:回文子串问题、两个数组的dp

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 回文子串问题回文子串最长回文子串分割回文串 IV分割回文串 II *最长回文子序列让字符串成为回文串的最少插入次数 两个数组的dp最…...

文件上传绕过的小点总结(3)

6.文件首尾加空绕过 源码给出这样的&#xff0c;发现文件名处理没有首尾去空&#xff0c;于是我们可以采用首尾加空的方式绕过。 $file_name $_FILES[upload_file][name]; $file_name deldot($file_name);//删除文件名末尾的点 $file_ext strrchr($file_name, .); $file_e…...

OpenHarmony 入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)

文章大纲 引言一、AppStorage 应用全局的UI状态存储1、StorageProp和StorageLink装饰器建立联系2、StorageProp2.1、StorageProp使用规则2.2、StorageProp变量的传递/访问规则2.3、StorageProp支持的观察变化2.4、StorageProp 值初始化和更新 3、StorageLink3.1、StorageLink使…...

4. 如何减少大模型幻觉?⸺大模型外挂向量数据库的分析(知识延伸版)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 大模型幻觉 1.1 大模型幻觉的含义 1.2 大…...

【渗透测试】Fastjson 反序列化漏洞原理(二)

目录 反序列化漏洞结合 RMI 攻击详解一、RMI 和 JNDI 的基础知识(1) RMI 简介(2) JNDI 简介 二、漏洞利用的核心原理1. 构造恶意 JSON 数据2. 设置恶意 RMI 服务3. 加载并执行恶意代码 三、具体利用过程环境准备攻击步骤1. 构造恶意 JSON 数据2. 设置恶意 RMI 服务3. 部署恶意类…...

阿里云国际站代理商:物联网设备怎样就近接入计算节点?

配置边缘计算实例 登录边缘计算控制台&#xff0c;找到已创建的边缘实例&#xff0c;点击实例名称后的“查看”。 分配OPC UA驱动到边缘实例中&#xff0c;选择OPCUA驱动&#xff0c;点击“设备列表”后的“驱动配置”&#xff0c;在弹出对话框中点击“添加通道”&#xff0c;…...

目录遍历漏洞复现

1.在fofa中输入语法&#xff0c;查询目录遍历 body"SKControlKLForJson.ashx" 查询结果为&#xff1a; 2.寻找目录遍历漏洞&#xff0c;访问网站&#xff1a; 3.我们可以app目录中下载文件等等 4.我们还可以访问其他目录的一些东西...

Java高频面试之集合-18

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;HashMap 是线程安全的吗&#xff1f;多线程下会有什么问题&#xff1f; HashMap 的线程安全性分析 HashMap 不是线程安全…...

清晰易懂的 C 语言开发环境彻底卸载与清理教程

一、卸载前的关键理解 C 语言本身是编程语言&#xff0c;无法直接“卸载”&#xff0c;但开发环境通常包含&#xff1a; 编译器&#xff08;如 GCC、Clang&#xff09;构建工具&#xff08;如 Make、CMake&#xff09;IDE 集成&#xff08;如 Visual Studio、Code::Blocks&am…...

系统思考—看见未来

感谢上海财经大学终身教育学院的持续邀请&#xff01;每个月&#xff0c;都会带着不同的思维火花&#xff0c;走进财大与学员们一起探索系统思考的奥秘。 这次为宜宾市的干部们带来了一场深刻的学习体验。通过系统思考&#xff0c;帮助大家从整体视角去发现问题、分析问题、解…...