算法通关村第十二关—字符串冲刺题(黄金)

           字符串冲刺题

一、最长公共前缀

 LeetCode14 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""

示例1:
输入:strs=["flower","fLow","flight"]
输出:"fL"
示例2:
输入:strs=["dog","racecar'","car"]
输出:""
解释:输入不存在公共前缀。

image.png
 根据题目内容,可以很明显看出两种思路,一种是纵向比较,一种是横向比较。
 先看第一种的实现方法,竖着比较。纵向扫描时,从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。

public String longestCommonPrefix(String[] strs){if (strs == null || strs.length == 0){return "";}int length = strs[0].length();int count = strs.length;for(int i = 0; i < length; i++){char c = strs[0].charAt(i);for (int j = 1; j < count; j++){if (i == strs[j].length() || strs[j].charAt(i) != c){return strs[0].substring(0,i);}}}return strs[0]
}

 第二种是横着依次比较,依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀(其实就是看是否要缩短,一定不会变长),当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续遍历剩下的字符串,直接返回空串即可。

public String longestCommonPrefix(String[] strs){if (strs ==null || strs.length == 0){return "";}String prefix = strs[0];int count = strs.length;for (int i = 1; i < count; i++){prefix = longestCommonPrefix(prefix,strs[i]);if(prefix.length() == 0) break;}return prefix;
}
public String longestCommonPrefix(String str1,String str2){int length = Math.min(str1.length(),str2.length());int index = 0;while (index < length && str1.charAt(index) == str2.charAt(index)){index++;return str1.substring(0,index);}
}

二、字符串压缩问题

 LeetCode443给你一个字符数组chars,请使用下述算法压缩:
 从一个空字符串s开始。对于chars中的每组连续重复字符:
1.如果这一组长度为1,则将字符追加到s中。
2.否则,需要向S追加字符,后跟这一组的长度。压缩后得到的字符串S不应该直接返回,需要转储到字符数组chars中。需要注意的是,如果组长度为10或10以上,则在chars数组中会被拆分为多个字符。
 请在修改完输入数组后,返回该数组的新长度。你必须设计并实现一个只使用常量额外空间的算法来解决此问题。

示例1:
输入:chars=["a","a","b","b","c","c","c"]
输出:返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]
解释:
"aa""a2"替代。"bb""b2"替代。"ccc""c3"替代。
示例2:
输入:chars=["a"]
输出:返回1,输入数组的前1个字符应该是:["a"]
解释:
没有任何字符串被替代。
示例3:
输入:chars=["a","b","b","b","b","b","b","b","b","b","b","b","b"]
输出:返回4,输入数组的前4个字符应该是:["a","b","1","2"]。
解释:
由于字符"a"不重复,所以不会被压缩。"bbbbbbbbbbbb"被“b12”替代。
注意每个数字在数组中都有它自己的位置。

 这个题貌似采用双指针策略来处理就行,但是再分析发现三个指针才够。两个进行正常点扫描,还有一个用来确定修改的位置
 这里还有一个问题,就是长度可能超过0,因此还要实现将数字转化为字符串写入到原字符串的功能。这里我们采用短除法将子串长度倒序写入原字符串中,然后再将其反转即可。

class Solution {public int compress(char[] chars) {int left = 0,right = 0, change = 0;int len = chars.length;//if(len == 1)return 1;while(right < len){while(right < len && chars[left] == chars[right]) right++;//该字符的数量int sum = right - left;//存入该字符chars[change] = chars[left];change++;int prechange = change;//将字符数量逐位存入if(sum != 1){int sum1 = sum;while(sum1 > 0){chars[change] = (char) (sum1 % 10 + '0');sum1 /= 10;change++;}//反转sum,前面存的时候是从低位存到高位,与题目要求相反if(sum >= 10){int nowchange = change - 1;while(prechange < nowchange){char temp = chars[prechange];chars[prechange] = chars[nowchange];chars[nowchange] = temp;prechange++;nowchange--;}}}left = right;}return change;}
}

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

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

相关文章

机器学习算法---时间序列

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

【力扣100】21.合并两个有序链表

添加链接描述 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -&…

SVPWM马鞍波形仿真(python)

SVPWM波的原理不再过多介绍。 最近在学习SVPWM&#xff0c;仿真了一下马鞍波。 python源码贡献出来。 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as anim############################################# # 我们的目的是根据机械角度&…

12.16_黑马数据结构与算法笔记Java

目录 167 B树 remove 168 B树 remove 搭架子 169 B树 remove case1-4 170 B树 remove case5-6分析 171 B树 remove case5 旋转 172 B树 remove case5 合并 173 B树 remove case6 174 B树 remove 演示1 175 B树 remove 演示2 176 哈希表 概述 177 哈希表 hash码映射索…

新视野大学英语1 词组 12.17

embarrassment和awkwardness的区别以及各自的组词。 "Embarrassment" 和 "awkwardness" 都可以用来描述一种尴尬或不舒服的感觉&#xff0c;但它们有一些微妙的区别。 "Embarrassment" 指的是由于尴尬、困窘或难堪的情况而产生的感觉。 这种感觉…

XXE漏洞 [NCTF2019]Fake XML cookbook1

打开题目 查看源代码 发现我们post传入的数据都被放到了doLogin.php下面 访问一下看看 提示加载外部xml实体 bp抓包一下看看 得到flag 或者这样 但是很明显这样是不行的&#xff0c;因为资源是在admin上&#xff0c;也就是用户名那里 PHP引用外部实体&#xff0c;常见的利用…

串口通信(5)-C#串口通信数据接收不完整解决方案

本文讲解C#串口通信数据接收不完整解决方案。 目录 一、概述 二、Modbus RTU介绍 三、解决思路 四、实例 一、概述 串口处理接收数据是串口程序编写的关键

(2)Linux 操作系统||基本创建与操作

本章将浅谈一下 "操作系统是什么" 的问题&#xff0c;随后通过讲解一些 Linux 下的基本指令&#xff0c;显示目录内容、跳转操作和文件的创建与删除。在讲解的同时我会穿插一些知识点&#xff0c;比如 Linux 隐藏文件、路径等基础知识。 了解操作系统 什么是操作系统…

【Java 并发】三大特性

在 Java 的高并发中&#xff0c;对于线程并发问题的分析通常可以通过 2 个主核心进行分析 JMM 抽象内存模型和 Happens-Before 规则三大特性: 原子性, 有序性和可见性 JMM 抽象内存模型和 Happens-Before 规则, 前面我们讨论过了。这里讨论一下三大特性。 1 原子性 定义: 一个…

第十一章 算法复杂度

11.1 大O表示法 它用于描述算法的性能和复杂程度。分析算法时&#xff0c;时常遇到以下几类函数&#xff1a; 11.1.1 理解大O表示法 如何衡量算法的效率&#xff1f;通常是用资源&#xff0c;例如CPU&#xff08;时间&#xff09;占用、内存占用、硬盘占用和网络 占用。当讨论…

时序预测 | Python实现GRU电力需求预测

时序预测 | Python实现GRU电力需求预测 目录 时序预测 | Python实现GRU电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用该…

docker:安装docker项目的问题记录

windows下拉取的项目&#xff0c;会导致sh文件带的换行符不一致导致报错。原来的docker文件源过期&#xff0c;需要网上找新的源来替换。缺少未知的配置文件&#xff0c;比如.env或者其他文件。需要其他同事告知&#xff0c;readme里面没有文档说明是坑。加减agt-get install时…

同义词替换在论文降重中的实际效果评估 快码论文

大家好&#xff0c;今天来聊聊同义词替换在论文降重中的实际效果评估&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;同义词替换在论文降重中的实际效果评…

CAN 七、CAN编程实战_阻塞发送中断接收

1、开发环境 (1)KeilMDK&#xff1a;V5.38.0.0 (2)STM32CubeMX&#xff1a;V6.8.1 (3)MCU&#xff1a;STM32F407ZGT6 (4)CAN盒&#xff1a; 2、实验目的 略 3、原理图 略 4、STM32CubeMX配置 略 5、KeilMDK软件编写 略

【总结】C语言中bit和sbit的区别

1&#xff0e;bit和sbit都是C51扩展的变量类型。 bit和int char之类的差不多&#xff0c;只不过char8位, bit1位而已。都是变量&#xff0c;编译器在编译过程中分配地址。除非你指定&#xff0c;否则这个地址是随机的。这个地址是整个可寻址空间&#xff0c;RAMFLASH扩展空间。…

用单片机控制步进电机的程序

结合按键程序&#xff0c;我们设计这样一个功能程序&#xff1a;按数字键 1&#xff5e;9&#xff0c;控制电机转过 1&#xff5e;9 圈&#xff1b;配合上下键改变转动方向&#xff0c;按向上键后正向转 1&#xff5e;9 圈&#xff0c;向下键则反向转 1&#xff5e;9 圈&#x…

PMI相关证书的获取步骤及注意内容

近几年很多行业的从业人员都在考取PMI项目管理相关证书&#xff0c;可在中国大陆地区参加考试的认证主要有&#xff1a;PMP, PgMP, PMI-RMP, PMI-ACP, PMI-PBA, CAPM。PfMP, PMI-SP尚未在中国大陆地区开放考试。 现整理该类证书的相关获取步骤及注意内容 一、证书获取步骤 S…

RHEL8_Linux下载ansible

本章内容主要介绍RHEL8中如何安装ansible ansible时如何工作的在RHEL8中安装ansible 1.ansible工作原理 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c;ansible就是这样的一种自动化管理工具。 1&…

docker离线安装redis

1、导入镜像 docker load -i redis.tar其中redis.tar为在有互联网的机子上导出的镜像 2、创建redis.conf&#xff08;见附件&#xff09; 3、启动命令 docker run -p 63791:6379 --name myredis -v /Home/redis/myredis/redis.conf:/etc/redis/redis.conf -v /Home/redis/my…

将html的radio单选框自定义样式为正方形和对号

将html的radio单选框自定义样式为正方形和对号 背景&#xff1a; 如何能把html的<input type"radio" name"option">改成自定义的样式呢&#xff1f;比如想要把他变成正方形&#xff0c;选中的时候是对号。默认的样式太丑了 默认样式&#xff1a; 自…