算法每日一题:按分隔符拆分字符串 | 字符串 | 特殊位置判断

题目:leetcode 2788
给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。
返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串
注意

  • separator 用于决定拆分发生的位置,但它不包含在结果字符串中。
  • 拆分可能形成两个以上的字符串。
  • 结果字符串必须保持初始相同的先后顺序。
    示例:
    示例 1:
输入:words = ["one.two.three","four.five","six"], separator = "."
输出:["one","two","three","four","five","six"]
解释:在本示例中,我们进行下述拆分:"one.two.three" 拆分为 "one", "two", "three"
"four.five" 拆分为 "four", "five"
"six" 拆分为 "six" 因此,结果数组为 ["one","two","three","four","five","six"] 。

示例 2:

输入:words = ["$easy$","$problem$"], separator = "$"
输出:["easy","problem"]
解释:在本示例中,我们进行下述拆分:"$easy$" 拆分为 "easy"(不包括空字符串)
"$problem$" 拆分为 "problem"(不包括空字符串)因此,结果数组为 ["easy","problem"] 。

示例 3:

输入:words = ["|||"], separator = "|"
输出:[]
解释:在本示例中,"|||" 的拆分结果将只包含一些空字符串,所以我们返回一个空数组 [] 。

提示:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 20
  • words[i] 中的字符要么是小写英文字母,要么就是字符串 “.,|$#@” 中的字符(不包括引号)
  • separator 是字符串 “.,|$#@” 中的某个字符(不包括引号)

分析:
先简单说一下这道题思路:遍历每一个字符串,寻找separator字符,如果找到,就从这个节点到上一个节点的字符串截下来。是不是咋一眼挺好做,其实不然!
难点主要有两个

  • 一个是连续的分割符如何处理(包括开头和结尾的)
  • 另一个是结束时,最后一个字符串如何拆下了(因为最后一个字符串末尾不一定有)

题解:

class Solution {public List<String> splitWordsBySeparator(List<String> words, char separator) {List<String> res = new ArrayList<String>();for (String word : words) {StringBuilder sb = new StringBuilder();int length = word.length();for (int i = 0; i < length; i++) {char c = word.charAt(i);if (c == separator) {if (sb.length() > 0) {res.add(sb.toString());sb.setLength(0);}} else {sb.append(c);}}if (sb.length() > 0) {res.add(sb.toString());}}return res;}
}

注意:

  • 操作字符串中的字符,尤其涉及遍历的时候,很容易就有很多增删改,所以我们使用StringBuilder
  • 字符串的末尾符号的处理:根据字符串长度来判断(这道题用了点技巧,虽然没有判断)
  • 这道题虽然后截取字符串,但是不建议使用substring()这个方法(虽然能做,但需要考虑许多许多种情况),因为他的连续分隔符不好处理
class Solution {public List<String> splitWordsBySeparator(List<String> words, char separator) {List<String> res = new ArrayList<>();for (String word : words) {int pre = 0;for (int i = 0; i < word.length(); i++) {if (word.charAt(i) == separator) {if(i == 0 || i == word.length()) {} else if (pre != i ) {String s = word.substring(pre, i);res.add(s);} pre = i + 1;} if (i == word.length() - 1 && word.charAt(i) != separator) {res.add(word.substring(pre, i) + word.charAt(i));}}}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【概率统计】区间估计 假设检验公式汇总

区间估计 假设检验公式汇总 最简单的一集

工业控制系统:HSLCommunication可以与PLC进行通信详解:C# HSLCommunication可以与 modbus tcp通信demo

当使用C#编程语言时&#xff0c;HSLCommunication库是一种常用的工具&#xff0c;用于实现与Modbus TCP通信。在本文中&#xff0c;我将为您提供详细的步骤和示例代码&#xff0c;以帮助您开始使用HSLCommunication库与Modbus TCP通信。 步骤1&#xff1a;安装HSLCommunicatio…

爬虫逆向开发教程1-介绍,入门案例

爬虫前景 在互联网的世界里&#xff0c;数据就是新时代的“黄金”。而爬虫&#xff0c;就是帮助我们淘金的“工具”。随着互联网的不断发展&#xff0c;数据量呈现指数级的增长&#xff0c;在数据为王的时代&#xff0c;有效的挖掘数据和利用&#xff0c;你会得到更多东西。 学…

SqlAlchemy使用教程(五) ORM API 编程入门

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门 前一章用SQL表达式(SQL Expr…

POJ - 3311 Hie with the Pie(Java JS Python C)

题目来源 3311 -- Hie with the Pie (poj.org) 题目描述 Pizazz披萨店以尽可能快地将披萨送到顾客手中而自豪。 不幸的是&#xff0c;由于削减开支&#xff0c;他们只能雇一个司机来送货。 司机将等待 1 个或更多 (最多10个) 订单被下达后再开始送餐。 不用说&#xff0c;…

第12章 项目质量管理

文章目录 项目质量管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求&#xff0c;以满足干系人目标的各个过程。此外&#xff0c;项目质量管理以执行组织的名义支持过程的待续改进活动。 12.1管理基础 12.1.1质量与项目质量 1质量 国际标准化组织(ISO)对质量…

用于垃圾回收的运行时配置选项

反馈 本文内容 指定配置的方法垃圾回收的风格管理资源使用情况大型页面 显示另外 4 个 此页面包含有关 .NET 运行时垃圾回收器 (GC) 设置的信息。 如果你要尝试让正在运行的应用达到最佳性能&#xff0c;请考虑使用这些设置。 然而&#xff0c;在特定情况下&#xff0c;默认…

基于大整形的运算收录

目录 目录 目录 前言 为什么要大整数 大整形的加/减法 大整形的乘法 大整形除法 大整形开方 代码实现 前言 好久没有更新博客了&#xff0c;hhh。时隔三个月&#xff0c;我又回来了。先来点简单的大整形&#xff0c;虽说简单&#xff0c;但是在编写的时候还是debug了…

学校门禁管理技巧,一招轻松学会!

随着社会的不断发展和科技的不断进步&#xff0c;安全管理成为各个领域至关重要的议题之一。门禁监控系统作为现代安全管理的关键组成部分&#xff0c;不仅为建筑物提供了有效的访问控制&#xff0c;还在提高整体安全性和管理效率方面发挥了关键作用。 客户案例 公司办公楼门禁…

C# 用于准确地测量运行时间的Stopwatch中.Start 方法和Stopwatch.Stop 方法

一、Stopwatch 类 提供一组方法和属性&#xff0c;可用于准确地测量运行时间。 public class Stopwatch 使用 Stopwatch 类来确定应用程序的执行时间。 // 使用 Stopwatch 类来确定应用程序的执行时间 using System.Diagnostics; class Program {static void Main(string[] a…

php no input file specified

一、修改 .user.ini 文件 内容 open_basedir/wab/led-sportslight.com/:/tmp/ led-sportslight.com是项目根目录位置 改好后保存并清空缓存硬刷新网站就行了 二、mkdir(): Permission denied /core/library/think/cache/driver/File.php 第 84 行左右 mkdir(): Permission de…

2024最新最全【网络安全面试题含答案】(非常详细),零基础入门到精通

防范常见的 Web 攻击 什么是SQL注入攻击 攻击者在HTTP请求中注入恶意的SQL代码&#xff0c;服务器使用参数构建数据库SQL命令时&#xff0c;恶意SQL被一起构造&#xff0c;并在数据库中执行。 用户登录&#xff0c;输入用户名 lianggzone&#xff0c;密码 ‘ or ‘1’’1 &a…

力扣刷题第八天 最大交换

给定一个非负整数&#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。注意: 给定数字的范围是 [0, 10^8] 方法一&#xff1a;直接遍历 由于对…

使用 OpenCV 添加(混合)两个图像

目标 在本教程中&#xff0c;您将学习&#xff1a; 什么是线性混合以及为什么它有用;如何使用 addWeighted&#xff08;&#xff09; 添加两个图像 理论 注意 下面的解释属于Richard Szeliski的《计算机视觉&#xff1a;算法和应用》一书 从我们之前的教程中&#xff0c;…

LabVIEW扫描探针显微镜系统开发

在纳米技术对高精度材料特性测量的需求日益增长。介绍了基于LabVIEW开发的扫描探针显微镜&#xff08;SPM&#xff09;系统。该系统不仅可以高效地测量材料的热物性&#xff0c;还能在纳米尺度上探究热电性质&#xff0c;为材料研究提供了强大的工具。 系统基于扫描探针显微技…

(2)(2.1) Andruav Android Cellular(二)

文章目录 前言 5 Andruav Web Client 6 Andruav Telemetry 7 Andruav高级功能 8 将Andruav与SITL配合使用 9 FAQ 10 术语表 前言 Andruav 是一个基于安卓的互联系统&#xff0c;它将安卓手机作为公司计算机&#xff0c;为你的无人机和遥控车增添先进功能。 5 Andruav W…

数学建模--PageRank算法的Python实现

文章目录 1. P a g e R a n k PageRank PageRank算法背景2. P a g e R a n k PageRank PageRank算法基础2.1. P a g e R a n k PageRank PageRank问题描述2.2.有向图模型2.3.随机游走模型 3. P a g e R a n k PageRank PageRank算法定义3.1. P a g e R a n k PageRank PageRank…

GD32接收不定长数据包

接收不定长数据 Cubemx生成代码过程忽略 首先在main函数中创建接收缓存区 并在main.h中定义 接下来就是重写串口的中断函数中的内容&#xff0c;把原有内容注释掉 main中创建一个记录接收数据长度的变量和标志位 然后再在主函数中添加一个验证代码&#xff0c;这样MCU收到数据…

Cesium叠加超图二维服务、三维场景模型

前言 Cesium作为开源的库要加超图的服务则需要适配层去桥接超图与Cesium的数据格式。这个工作iClient系列已经做好&#xff0c;相比用过超图二维的道友们可以理解&#xff1a;要用Openlayer加载超图二维&#xff0c;那就用iClient for Openlayer库去加载&#xff1b;同样的要用…

el-table导出表格文件

先写一个download公共的方法 download(file) {const blob fileconst blobURL window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob)const a document.createElement(a)a.download 故障的报表.xlsxa.href blobURLdocument.body.appen…