算法专题:字符串

目录

1. 最长公共前缀

1.1 算法原理

1.2 算法代码

2. 最长回文子串

2.1 算法原理

2.2 算法代码

3. 二进制求和

3.1 算法原理

 3.2 算法代码

4. 字符串相乘

4.1 算法原理 

4.2 算法代码


1. 最长公共前缀

. - 力扣(LeetCode)

1.1 算法原理

有以下两种策略:

  1. 两两进行比较
  2. 统一进行比较

这里需要注意比较的结束条件:

  1. 当对任一字符串访问出现越界时, 应进行返回
  2. 当两个字符串相同位置上的元素不相同时, 应进行返回.

1.2 算法代码

class Solution {/*** 两两比较* @param strs* @return*/public String longestCommonPrefix(String[] strs) {String ret = strs[0];for(int i = 1; i < strs.length; i++) {ret = findSame(ret, strs[i]);}return ret;}public String findSame(String s1, String s2) {String ret = "";int i = 0;while(i < Math.min(s1.length(), s2.length()) && s1.charAt(i) == s2.charAt(i))i++;return s1.substring(0, i);}/*** 统一比较* @param strs* @return*/public String longestCommonPrefix1(String[] strs) {StringBuilder ret = new StringBuilder();for(int i = 0; i < strs[0].length(); i++) {char ch = strs[0].charAt(i);for(String str : strs) {if(i >= str.length()) return ret.toString();if(str.charAt(i) != ch) return ret.toString();}ret.append(ch);}return ret.toString();}
}

2. 最长回文子串

. - 力扣(LeetCode)

2.1 算法原理

本题有动态规划和中心扩展算法两个解法, 动态规划的解法已经在动态规划的专题上展示了, 这里使用中心扩展算法:

  1. 固定一个中心点
  2. 从中心点开始, 向两边扩展(注意: 子串长度为奇数和偶数的情况都要考虑)

2.2 算法代码

class Solution {public String longestPalindrome(String s) {int n = s.length();String ret = "";for(int i = 0; i < n; i++) {// 遍历中心位置int left = i, right = i;// 奇数子串while(left >= 0 && right < n && s.charAt(left) == s.charAt(right)) {left--;right++;}String str = s.substring(left + 1, right);ret = ret.length() >= str.length() ? ret : str;// 偶数子串left = i; right = i + 1;while(left >= 0 && right < n && s.charAt(left) == s.charAt(right)) {left--;right++;}str = s.substring(left + 1, right);ret = ret.length() >= str.length() ? ret : str;}return ret;}
}

3. 二进制求和

. - 力扣(LeetCode)

3.1 算法原理

本题本质上是一到模拟题, 模拟高精度加法. 高精度, 就是指 数非常的大, 数据的长度非常的长.

  1. 关键点在于遍历两个字符串
  2. 使用 tmp 记录两个字符串相同的位置相加后的值
  3. tmp % 2 => 结果值(二进制)
  4. tmp / 2 => 相加所得的进位

 3.2 算法代码

class Solution {public String addBinary(String a, String b) {// 模拟高精度加法int cur1 = a.length() - 1;int cur2 = b.length() - 1;int tmp = 0;StringBuilder sb = new StringBuilder();while(cur1 >= 0 || cur2 >= 0 || tmp != 0) {if(cur1 >= 0) tmp += a.charAt(cur1--) - '0';if(cur2 >= 0) tmp += b.charAt(cur2--) - '0';sb.append(tmp % 2);tmp /= 2;}return sb.reverse().toString();}
}

4. 字符串相乘

. - 力扣(LeetCode)

4.1 算法原理 

解法: 无进位相乘再相加, 最后处理进位

  1. 逆序字符串
  2. 无进位相乘再相加(将得到的结果使用数组存起来, 放到 i+j 位置处)
  3. 处理进位
  4. 处理前导零

4.2 算法代码

class Solution {public String multiply(String num1, String num2) {// 解法: 无进位相乘再相加, 最后处理进位// 预处理int m = num1.length(), n = num2.length();int[] arr = new int[m + n - 1];StringBuilder s1 = new StringBuilder(num1);StringBuilder s2 = new StringBuilder(num2);s1.reverse();s2.reverse();// 无进位相乘再相加for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) arr[i + j] += (s1.charAt(i) - '0') * (s2.charAt(j) - '0');StringBuilder ret = new StringBuilder();int t = 0;int i = 0;// 处理进位while(i < arr.length || t != 0) {if(i < arr.length) t += arr[i++];ret.append(t % 10);t /= 10;}// 处理前导零ret.reverse();while(ret.charAt(0) == '0' && ret.length() > 1) ret.deleteCharAt(0);return ret.toString();}
}

END

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十八集补充:制作空洞骑士独有的EventSystem和InputModule

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作空洞骑士独有的EventSystem和InputModule总结 前言 hello大家好久没见&#xff0c;之所以隔了这么久才更新并不是因为我又放弃了这个项目&#xff0c;而…

capl语言

capl:事件型语言 定时器代码 数据类型 capl运算符&#xff08;一&#xff09; capl运算符&#xff08;二&#xff09; 逻辑非&#xff1a;两个条件同时成立则为真&#xff08;1&#xff09;&#xff0c;否则为假&#xff08;0&#xff09;. 逻辑与&#xff1a;只有一个条件…

[渲染层网络层错误] net::ERR_CONTENT_LENGTH_MISMATCH 问题解决

问题描述 问题背景 微信小程序访问后端img资源的时候&#xff0c;偶尔出现这个感叹号&#xff0c;图片加载不出来&#xff0c;但是对应的url贴出来在浏览器中访问&#xff0c;或者重新加载是可以访问的。 错误描述 经查询前端报错 [渲染层网络层错误] net::ERR_CONTENT_LE…

跳蚤市场之商品发布功能

一 商品类别和小类的联动 以下是一个示例代码&#xff0c;展示了如何实现商品类别中大类和小类的联动。 商品大类选择框、小类选择框 的设计 html部分 <form id"category-form"><label for"major-category">大类&#xff1a;</label&g…

LabVIEW气体检测系统

随着工业化进程的加速&#xff0c;环境污染问题愈加严峻&#xff0c;尤其是有害气体的排放对人类生存环境构成了严重威胁。为了更好地监测这些有害气体&#xff0c;开发一个高效、准确且易于操作的气体检测系统显得尤为重要。LabVIEW软件开发的气体检测系统&#xff0c;采用激光…

【三维重建】Semantic Gaussians:开放词汇的3DGS场景理解

文章目录 摘要一、引言二、主要方法1.3D Gaussian Splatting2.其他方法2.1 Gaussian Grouping2.2 GARField 3. 2D Versatile 投影4. 3D Semantic Network4. 推理 四、实验1. 实验设置2.定量结果 论文&#xff1a;https://arxiv.org/pdf/2403.15624 摘要 开放词汇的三维场景理解…

机器学习—前向传播的一般实现

可以写一个函数来实现一个密集的层&#xff0c;那是神经网络的单层&#xff0c;所以定义稠密函数&#xff0c;它将上一层的激活作为输入以及给定层神经元的参数w和b。看下边图片所展示的例子&#xff0c;把所有这些权重向量堆叠成一个矩阵&#xff0c;wnp.array([[1,-3,5][2,4,…

Java实验六 网络和数据库

1. 利用InetAddress编写程序接受用户输入网址&#xff0c;输出这个网址的主机IP地址。 package project; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Scanner; public class GetIPAddress {public static void main(String[] args…

猎板PCB2到10层数的科技进阶与应用解析

1. 单层板&#xff08;Single-sided PCB&#xff09; 定义&#xff1a;单层板是最基本的PCB类型&#xff0c;导线只出现在其中一面&#xff0c;因此被称为单面板。限制&#xff1a;由于只有一面可以布线&#xff0c;设计线路上有许多限制&#xff0c;不适合复杂电路。应用&…

分布式任务调度实现原理

目录 分布式任务调度功能 分布式任务调度实现 1.Scheduler&#xff08;调度器&#xff09; 2.Trigger&#xff08;触发器&#xff09; 3.Job&#xff08;任务&#xff09; 分布式任务调度框架 xxl-job quartz Snail Job PowerJob elastic-job 分布式任务调度功能 通…

qt QFontDialog详解

1、概述 QFontDialog 是 Qt 框架中的一个对话框类&#xff0c;用于选择字体。它提供了一个可视化的界面&#xff0c;允许用户选择所需的字体以及相关的属性&#xff0c;如字体样式、大小、粗细等。用户可以通过对话框中的选项进行选择&#xff0c;并实时预览所选字体的效果。Q…

qt QStandardItem详解

1、概述 QStandardItem是Qt框架中QStandardItemModel的一个基础元素&#xff0c;用于在基于项的模型&#xff08;如QStandardItemModel&#xff09;中表示单个数据项。QStandardItem可以存储文本、图标、工具提示等丰富的信息&#xff0c;并且支持数据的编辑和自定义显示。通过…

【每日一题】LeetCode - 最接近的三数之和

LeetCode 的「最接近的三数之和」问题要求我们从给定整数数组中找到三个数的和&#xff0c;使它最接近目标值。适合初学者的原因在于它结合了双指针、排序等基本技巧&#xff0c;为大家理解基本的算法和数据结构提供了一个很好的机会。 如果你不知道什么是双指针可以参考我之前…

【青牛科技】GC8549替代LV8549/ONSEMI在摇头机、舞台灯、打印机和白色家电等产品上的应用分析

引言 在现代电子产品中&#xff0c;控制芯片的性能直接影响到设备的功能和用户体验。摇头机、舞台灯、打印机和白色家电等领域对控制精度、功耗和成本等方面的要求日益提高。LV8549/ONSEMI等国际品牌的芯片曾是这些产品的主要选择&#xff0c;但随着国内半导体技术的进步&…

教育机构如何利用知识中台进行数字教学

在教育行业&#xff0c;数字化转型已成为提升教学质量和效率的关键。知识中台作为一种新兴的技术平台&#xff0c;为教育机构提供了一个集中化、智能化的知识管理和应用解决方案。本文将探讨教育机构如何利用知识中台进行数字教学&#xff0c;以及这一转型带来的优势。 1. 知识…

项目审核系统 ---(连接数据库---项目模拟)

本章主要是查询方法和修改方法 编写查询方法&#xff0c;查询所有项目审核信息并返回查询结果&#xff0c;需实现分页功能&#xff0c;注意必要的异常处理。编写查询方法&#xff0c;根据项目编号查询指定项目的审核信息&#xff0c;注意必要的异常处理。编写修改方法&#xf…

C语言 | Leetcode C语言题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; char * findLongestWord(char * s, char ** d, int dSize){char *result "";int max -1;for (int i 0; i < dSize; i) {char *p s, *q d[i];int j 0, k 0;while (p[j] ! \0 && q[k] ! \0) {if (p[j] q[k]) {k…

Git详细使用

本地项目托管到码云中教程 1. 使用git init 命令&#xff0c;git init命令用于在目录中创建新的 Git 仓库。 在目录中执行git init就可以创建一个 Git 仓库了。 2. 使用git status命令查看未提交的文件 3. 使用git add . 命令将所有文件添加到暂存区 4. 使用git commit -m &qu…

开源办公软件 ONLYOFFICE 深入探索

文章目录 引言1. ONLYOFFICE 创建的背景1. 1 ONLYOFFICE 项目启动1. 2 ONLYOFFICE 的发展历程 2. 核心功能介绍2. 1 桌面编辑器2. 1. 1 文档2. 1. 2 表格2. 1. 3 幻灯片 2. 2 协作空间2. 3 文档编辑器 - 本地部署版 3. 技术介绍4. 安装5. 优势与挑战6. 个人体验7. 强大但不止于…

Day95 Docker

Docker的使用 1、Docker是什么 docker是一个用来管理镜像的容器 容器(container)&#xff1a;可以装东西 镜像( image )&#xff1a;所谓的镜像&#xff0c;你可以认为就是一个虚拟机 虚拟机&#xff1a;用软件代理硬件来模拟整个计算机的这样一套软件就成为 虚拟机 镜像说白了…