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

每日一练:找到初始输入字符串 I

本题出自3330. 找到初始输入字符串 I,初看有些难理解作者目的,不过看完示例就明白了


题目 

Alice 正在她的电脑上输入一个字符串。但是她打字技术比较笨拙,她 可能 在一个按键上按太久,导致一个字符被输入 多次 。

尽管 Alice 尽可能集中注意力,她仍然可能会犯错 至多 一次。

给你一个字符串 word ,它表示 最终 显示在 Alice 显示屏上的结果。

请你返回 Alice 一开始可能想要输入字符串的总方案数。

示例 

示例 1:

输入:word = "abbcccc"

输出:5

解释:

可能的字符串包括:"abbcccc" ,"abbccc" ,"abbcc" ,"abbc" 和 "abcccc" 。

示例 2:

输入:word = "abcd"

输出:1

解释:

唯一可能的字符串是 "abcd" 。

示例 3:

输入:word = "aaaa"

输出:4


题解

C语言

int count = 1;  // 初始化为无错误情况(原始字符串自身)int i = 0;while (word[i] != '\0') {  // 遍历整个字符串char current = word[i];  // 记录当前字符int start = i;  // 记录连续字符块的起始位置while (word[i] == current) i++;  // 跳过相同字符,统计连续块长度int length = i - start;  // 计算连续块长度if (length > 1) count += length - 1;  // 长度>1时,增加错误方案数(块长-1)}return count;  // 返回总方案数

java

int count = 1;  // 初始化为无错误情况(原始字符串自身)int i = 0, n = word.length();while (i < n) {  // 遍历整个字符串char current = word.charAt(i);  // 记录当前字符int start = i;  // 记录连续字符块的起始位置while (i < n && word.charAt(i) == current) i++;  // 跳过相同字符,统计连续块长度int length = i - start;  // 计算连续块长度if (length > 1) count += length - 1;  // 长度>1时,增加错误方案数(块长-1)}return count;  // 返回总方案数

Python

def possibleStringCount(word: str) -> int:count = 1  # 初始化为无错误情况(原始字符串自身)i, n = 0, len(word)while i < n:  # 遍历整个字符串j = i  # 记录连续字符块的起始位置while j < n and word[j] == word[i]: j += 1  # 跳过相同字符,统计连续块长度length = j - i  # 计算连续块长度if length > 1: count += length - 1  # 长度>1时,增加错误方案数(块长-1)i = j  # 移动到下一个不同字符return count  # 返回总方案数

解题思路

  1. ​输入 word = "abbcccc"

    • 连续块:a(长 1)、bb(长 2)、cccc(长 4)。
    • 总方案数 = 1+(2−1)+(4−1)=5:
      • 无错误:"abbcccc"
      • 错误在 b 块:原始为 "abcccc"b 减少 1 个)
      • 错误在 c 块:原始为 "abbccc""abbcc""abbc"c 减少 1~3 个)
  2. ​输入 word = "abcd"

    • 所有块长度均为 1 → 总方案数 = 1(唯一无错误方案)。
  3. ​输入 word = "aaaa"

    • 单个块长度 4 → 总方案数 = 1+(4−1)=4:
      • 无错误:"aaaa"
      • 错误情况:原始为 "aaa""aa""a"(减少 1~3 个 a)。
关键观察
  • 无错误情况​:原始字符串与 word 完全相同,计 ​1 种方案
  • 单次错误情况​:在某个连续字符块(长度 L ≥ 2)上,原始字符串中该块长度可能是 1 到 L-1(即减少 1 至 L-1 个字符),贡献 ​L-1 种方案
  1. 初始化​:方案数 count = 1(无错误情况)。
  2. 遍历字符串​:
    • 统计每个连续相同字符块的长度 L
    • 若 L ≥ 2,则 count += L - 1
  3. 返回结果​:count 即为总方案数

关键点​:错误仅发生在连续字符块(L≥2),且每个块独立贡献 L-1 种方案,互斥(因错误至多一次)。

详解(以C语音为例)

  • 基础方案(无错误的情况)​​:count 初始化为1,对应原始字符串无重复输入错误的情况。
  • 错误方案统计​:遍历每个连续字符块,若块长度 L>1,则存在 L-1 种错误情况(即重复按键导致的字符多输入了 1 到 L-1 次)。例如:
    • 块 "bb"L=2)→ 方案数增加1(原始可能是 "b")。
    • 块 "cccc"L=4)→ 方案数增加3(原始可能是 "c""cc""ccc")。
  • 通过索引 i 逐个访问字符,直到遇到字符串终止符
  • 内层循环​:跳过所有与 current 相同的字符,直到遇到不同字符或结尾。
  • if (length > 1) count += length - 1(若连续块长度 length > 1,说明此处可能发生重复按键错误。错误方案数 = length - 1

制作不易,感谢你的点赞、收藏与关注 ovo

http://www.dtcms.com/a/263786.html

相关文章:

  • AbMole| H₂DCFDA(M9096;活性氧(ROS)探针)
  • MySQL索引深度解析:B+树、B树、哈希索引怎么选?
  • 凸包进阶旋转卡壳(模板题目集)
  • Window 2000 Perfectional_配置和管理FTP
  • uniapp内置蓝牙打印
  • Qt小组件 - 1(手风琴)
  • 计算机网络:【socket】【UDP】【地址转换函数】【TCP】
  • 测试第六讲-测试模型分类
  • CloudBase AI ToolKit实战:从0到1开发一个智能医疗网站
  • 时空数据挖掘五大革新方向详解篇!
  • 电机控制——电机位置传感器零位标定
  • 安防监控视频汇聚平台EasyCVR v3.7.2版云端录像无法在web端播放的原因排查和解决方法
  • springboot3.2/3.4+rocketmq5.3.3测试程序的基本例子
  • SSVEP Next:现代化的 SSVEP 可视化 Web 快速实现
  • CAU数据挖掘实验 表分析数据插件
  • 【第二章:机器学习与神经网络概述】04.回归算法理论与实践 -(2)支持向量回归(SVR)
  • 软考中级【网络工程师】第6版教材 第1章 计算机网络概述
  • MATLAB构建capm和三因子模型
  • (论文总结)语言模型中的多模态思维链推理
  • 记一次Ubuntu22安装MongoDB8并同步本地数据过程
  • 动手学深度学习13.5. 多尺度目标检测-笔记练习(PyTorch)
  • FPGA FMC 接口
  • 【仿muduo库实现并发服务器】LoopThreadPool模块
  • Linux安装JDK和Maven
  • 多探头分布式雷达测流系统解决方案概述
  • 洛谷P1379 八数码难题【A-star】
  • 目标检测在国防和政府的应用实例
  • vue-i18n+vscode+vue 多语言使用
  • 缺乏对新成员的有效融入机制,如何改进
  • 学习昇腾开发的第12天--安装第三方依赖