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

最长公共前缀

14. 最长公共前缀 - 力扣(LeetCode)

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

纵向扫描

在这里插入图片描述

public static String longestCommonPrefix(String[] strs)
{if(strs.length == 0 || strs[0].isEmpty())return "";String firstStr = strs[0];for (int i = 0; i < firstStr.length(); i++){for(String curStr : strs)if (i == curStr.length() || curStr.charAt(i) != firstStr.charAt(i))return firstStr.substring(0, i);}return firstStr;
}

横向扫描

依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。

如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续遍历剩下的字符串,直接返回空串即可。

在这里插入图片描述

public String longestCommonPrefix(String[] strs)
{if (strs.length == 0 || strs[0].isEmpty())return "";String prefix = strs[0];for(String curStr : strs){prefix = longestCommonPrefix_ofTwoStr(prefix, curStr);if (prefix.equals(" "))break;}return prefix;
}public String longestCommonPrefix_ofTwoStr(String str1, String str2)
{int index = 0;int len = Math.min(str1.length(), str2.length());while (index < len && str1.charAt(index) == str2.charAt(index))index++;return str1.substring(0, index);
}

压缩字符串

443. 压缩字符串 - 力扣(LeetCode)

给你一个字符数组 chars ,请使用下述算法压缩:

从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符

  • 如果这一组长度为 1 ,则将字符追加到 s 中。
  • 否则,需要向 s 追加字符,后跟这一组的长度。

压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 1010 以上,则在 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"]
解释:唯一的组是“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” 替代。

提示:

  • 1 <= chars.length <= 2000
  • chars[i] 可以是小写英文字母、大写英文字母、数字或符号

空间复杂度 O(n)

public static int compress(char[] chars)
{StringBuilder s = new StringBuilder();//快慢双指针int fast;for (int slow = 0; slow < chars.length; slow = fast){int count = 1;//检查重复字符for (fast = slow + 1; fast < chars.length; fast++){if(chars[fast] == chars[slow])count++;elsebreak;}//压缩s.append(chars[slow]);if(count > 1)s.append(count);}//修改charsfor (int i = 0; i < s.length(); i++)chars[i] = s.charAt(i);return s.length();
}

空间复杂度 O(1)

public static int compress_2(char[] chars)
{if(chars.length == 1)return 1;int size = 0; //压缩后字符数组的有效长度int count = 0; //重复字符数for (int i = 0; i< chars.length; i++){char curChar = chars[i];    //当前字符count++;//若当前字符是最后一个字符,或与下一个字符不同,则对当前字符进行压缩if (i == chars.length - 1 || curChar != chars[i + 1]){chars[size] = curChar;size++;//压入数字if (count > 1){//计算 count 的位数int tempCount = count;int lengthOfCount = 0;while (tempCount != 0){lengthOfCount++;tempCount /= 10;}//在 curChar 后压入数字。从个位开始,从右往左压入int pos = size - 1 + lengthOfCount;while (count > 0){chars[pos--] = (char) ((count % 10) + '0');count /= 10;}//更新压入数字后 chars 的有效长度size += lengthOfCount;}//进行完一次压缩后便将 count 清零count = 0;}}return size;
}

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

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

相关文章

保姆级CISP报考攻略,让你不再迷茫

信息安全领域越来越火&#xff0c;想要在这个行业闯出一片天&#xff1f;CISP认证就是你的“敲门砖”&#xff01;想知道如何顺利考取这个超牛的证书吗&#xff1f;下面就带你一起探索保姆级CISP报考流程&#xff01;&#x1f389; &#x1f393;报考条件&#x1f393; 学历专业…

聚观早报 | 苹果将开放第三方NFC支付;华为P70系列参数曝光

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月23日消息 苹果将开放第三方NFC支付 华为P70系列参数曝光 Celestiq已正式开始量产 岚图汽车官宣与华为合作 美…

C# CefSharp 根据输入日期段自动选择日期

1&#xff0c;前言 搞这个Demo整整搞几天通宵&#xff0c;爆肝了。后做的效果出来&#xff0c;还是不错的。给小伙伴看看效果图。 2, 遇到的问题 日期之间相差多少个月数。开始时间框点击对应月份要点击多少次&#xff0c;结束时间框点击对应月份要点击多少次Xpath获取问题。…

Bit Extraction and Bootstrapping for BGV/BFV

参考文献&#xff1a; [GHS12] Gentry C, Halevi S, Smart N P. Better bootstrapping in fully homomorphic encryption[C]//International Workshop on Public Key Cryptography. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 1-16.[AP13] Alperin-Sheriff J, Pe…

MATLAB Fundamentals>>>Smoothing Data with Moving Average

MATLAB Fundamentals>Common Data Analysis Techniques>Smoothing Data> (2/5) Smoothing Data with Moving Average 例1&#xff1a; Smoothing method:Moving mean Moving window:Centered 2 代码2&#xff1a; % Smooth input data ySm smoothdata(y,"mov…

L1-091 程序员买包子(Java)

这是一条检测真正程序员的段子&#xff1a;假如你被家人要求下班顺路买十只包子&#xff0c;如果看到卖西瓜的&#xff0c;买一只。那么你会在什么情况下只买一只包子回家&#xff1f; 本题要求你考虑这个段子的通用版&#xff1a;假如你被要求下班顺路买 N 只包子&#xff0c;…

应聘软件测试,差点栽在了...这5道S级的测试用例设计题上... ...

1、 用例设计&#xff1a;根据下面需求&#xff0c;进行测试用例设计&#xff0c;请注意对测试点的表达。 &#xff08;网页端&#xff09;需求描述&#xff1a; 某项目的营养素配置页面&#xff0c;供用户用来配置营养素的相关信息&#xff0c;其中&#xff1a; l 项目可供…

java通过模板导出到Excel

依赖 依赖,该项目是gradle管理依赖&#xff0c;需要maven的可以去maven仓库找一下对应的依赖 implementation com.alibaba:easyexcel:2.2.10控制层 Operation(summary "导出excel")GetMapping("/export")public void exportExcel(RequestParam String sta…

得帆云X锦江酒店(中国区),iPaaS是传统ESB升级的最佳方案

锦江酒店&#xff08;中国区&#xff09;是锦江国际集团“深耕国内、全球布局、跨国经营”全球品牌战略的重要布局&#xff0c;旗下酒店品牌覆盖多元市场&#xff0c;致力于为消费者提供高品质和多样化的出行体验。 锦江酒店&#xff08;中国区&#xff09;目前旗下有维也纳国…

Mapbox加载浙江省天地图服务和数据处理

1. 加载影像服务 通过浙江省天地图官网申请所需服务&#xff0c;使用token获取服务数据 由于浙江省天地图使用的坐标系是 cgcs2000&#xff0c;需要使用 的框架对应为 cgcs2000/mapbox-gl&#xff0c;通过cdn引入或npm下载 影像服务地址为&#xff1a; ‘https://ditu.zjzw…

vulhub之Zabbix篇

CVE-2016-10134--SQL注入 一、漏洞介绍 zabbix是一款服务器监控软件&#xff0c;其由server、agent、web等模块组成&#xff0c;其中web模块由PHP编写&#xff0c;用来显示数据库中的结果。 漏洞环境 在vulhub靶场进行复现&#xff0c;启动zabbix 3.0.3。 二、复现步骤 1…

使用DockerFile构建镜像与镜像上传

目录 前言&#xff1a;为什么要使用Dockerfile &#xff1f; DockerFile构建镜像 1、构建基础对象 2、Dockerfile文件结构 3、构建Dockerfile文件镜像 二、镜像上传&#xff08;阿里云&#xff09; 前言&#xff1a;为什么要使用Dockerfile &#xff1f; 首先Dockerfile …