力扣.5.最长回文子串力扣.14最长公共前缀力扣219.存在重复元素II力扣.67二进制求和

目录

力扣.5.最长回文子串

力扣.14最长公共前缀

力扣219.存在重复元素II

力扣.67二进制求和


力扣.5.最长回文子串

中心拓展算法,假设以i位置为中心两边可以扩展到多少,所以当对应一个中间位置的时候,可以定义两个指针,对应一个前和一个后,然后中心扩展面临的问题就是可能回文是奇数,可能是偶数,所以需要进行两次中心扩展,

class Solution {public String longestPalindrome(String s) {//中心拓展算法int n=s.length();char[]a=s.toCharArray();String c="";int max=0;for(int i=0;i<n;i++){int left=i-1;int right=i+1;while(left>=0&&right<n){if(a[left]==a[right]){left--;right++; }else{break;}}if(right-left-1>max){c=s.substring(left+1,right);max=right-left-1;}left=i;right=i+1;while(left>=0&&right<n){if(a[left]==a[right]){left--;right++; }else{break;}}if(right-left-1>max){c=s.substring(left+1,right);max=right-left-1;}}return c;}
}

力扣.14最长公共前缀

我起初的想法十分混乱,压根没往什么两个比较上想,我还是想用哈希表统计次数,但是越统计发现糊涂,有点懵了,(然后看是简单题,我就这么一个调试,快完事了后,告诉我,最后几个用例过不去,直接放弃看题解的思路,没想到这么简单,说个思路就写出来了。 

​​​​​​​

可以定义一个指针,相同的情况右移动,相同右移动,蛮考验代码实力

class Solution {
public static String longestCommonPrefix(String[] strs) {int []hash=new int[26];int n=strs.length;//两个两个比较String common=strs[0];for(int i=1;i<n;i++) {char[]a=common.toCharArray();String ret="";char[] b = strs[i].toCharArray();for (int j = 0; j < Math.min(b.length, a.length); j++) {if (a[j] == b[j]) {ret += a[j];} else {break;}}common=ret;}return common;
}
}

这个解法的优化代码版本:思路是一致的

class Solution {public  String longestCommonPrefix(String[] strs) {//两个两个比较String ret=strs[0];//先记录第一个字符串,然后依次比较即可for(int i=1;i<strs.length;i++){ret=findCommon(strs[i],ret);}return ret;}public String findCommon(String s1,String s2){int i=0;
//记录后统计i的位置,然后如果s1和s2相等,i往后移动while(i<Math.min(s1.length(),s2.length())&&s1.charAt(i)==s2.charAt(i))i++;
//这样就返回0-i位置的字符串return s1.substring(0,i);}
}

解法二:统一比较,就是我上面的那个最初想法,但是还略微不同

class Solution {public static String longestCommonPrefix(String[] strs) {int []hash=new int[26];int n=strs.length;//两个两个比较String common="";int min=9999;int count=0;for(int i=0;i<n;i++){min=Math.min(min,strs[i].length());}for(int j=0;j<min;j++){char[]a=strs[0].toCharArray();char tmp=a[j];for(int i=0;i<n;i++){char[]b=strs[i].toCharArray();if(tmp!=b[j]){count=1;break;}}if(count==1){break;}common+=tmp;}return common;}
}

力扣219.存在重复元素II

使用哈希表的同时我们还需要注意,他的存储下标,假如她出现第二种情况

1 0 1 1,当我们发现重复元素,看他是不是满足<=k,假如满足直接返回k,假如不满足,我们默认更新后面的重复值,因为假如后面还有重复值,那肯定是离他最近的相同的元素,是我们这个想更新的元素,而不是最远的那个,因为我们是想返回true,那肯定先找能满足这个小于的情况的(意思就是找近的)。

class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {HashMap<Integer,Integer>a=new HashMap<>();for(int i=0;i<nums.length;i++){if(!a.containsKey(nums[i])){a.put(nums[i],i);}else{if(Math.abs(a.get(nums[i])-i)<=k)  return true;a.put(nums[i],i);}}return false;}
}

力扣.67二进制求和

这个代码感觉有点冗余,就是典型的莽夫算法

class Solution {//a和b两个字符串,我们想要求出两个的和public static String addBinary(String a, String b) {char[]aa=a.toCharArray();char[]bb=b.toCharArray();int i=aa.length-1;int j=bb.length-1;StringBuffer ret=new StringBuffer();int count=0;while(i>=0&&j>=0) {//两个都是1,然后进位有一个0if(aa[i]=='1'&&bb[j]=='1'&&count==0){ret.append(0);count++;}//两个1,并且进位是1else if(aa[i]=='1'&&bb[j]=='1'&&count==1){ret.append(1);}//假如说有一个为0,一个为1的情况,进位为1else if((aa[i]=='1'||bb[j]=='1')&&count==1){ret.append(0);}else if((aa[i]=='1'||bb[j]=='1')&&count==0){ret.append(1);}//两个都是0的情况else if(aa[i]=='0'&&bb[j]=='0'&&count==0){ret.append(0);}else if(aa[i]=='0'&&bb[j]=='0'&&count==1){count--;ret.append(1);}i--; j--;}while(i>=0){//两个都是1,然后进位有一个0if(aa[i]=='1'&&count==0){ret.append(1);}//两个1,并且进位是1else if(aa[i]=='1'&&count==1){ret.append(0);}else if(aa[i]=='0'&&count==1){count--;ret.append(1);}else if(aa[i]=='0'&&count==0){ret.append(0);}i--;}while(j>=0){//两个都是1,然后进位有一个0if(bb[j]=='1'&&count==0){ret.append(1);}//两个1,并且进位是1else if(bb[j]=='1'&&count==1){ret.append(0);}else if(bb[j]=='0'&&count==1){count--;ret.append(1);}else if(bb[j]=='0'&&count==0){ret.append(0);}j--;}if(count==1){ret.append(count);count--;}return ret.reverse().toString();}
}

实际上高精度是想考

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

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

相关文章

Vue.js 插槽 Slots 实际应用 最近重构项目的时候遇到的...

前端开发中 插槽 Slots 是一个重要的概念 我们可以查看一下vue.js的官方文档 https://cn.vuejs.org/guide/components/slots 类似于连接通道一样 可以把核心代码逻辑搬到另外的地方 做一个引用 而原先的地方可能并不能这样书写 对于这个概念我在vue的官方文档里面找到了…

快速识别模型:simple_ocr,部署教程

快速识别图片中的英文、标点符号、数学符号、Emoji, 模型会输出图片中文字行的坐标位置、最低得分、识别结果。当前服务用到的模型&#xff1a;检测模型、数字识别、英文符号识别。 一、部署流程 1.更新基础环境 apt update2.安装miniconda wget https://repo.anaconda.com/…

Android mk/bp构建工具介绍

零. 前言 由于Bluedroid的介绍文档有限&#xff0c;以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等)&#xff0c;加上需要掌握的语言包括Java/C/C等&#xff0c;加上网络上其实没有一个完整的介绍Bluedroid系列的文档&#xff0…

docker安装使用Elasticsearch,解决启动后无法访问9200问题

1.docker安装、启动es docker pull elasticsearch:8.13.0docker images启动容器 docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS"-Xms256m -Xmx256m" --name es01 8ebd258614f1-d 后台运行-p 9200:9200 -p 9300:9300 开放与主机映射端口-e ES_JAVA_OPTS…

揭秘云计算 | 5、关于云计算效率的讨论

一、 公有云效率更高&#xff1f; 解&#xff1a;公有云具有更高的效率。首先我们需要知道效率到底指的是什么。这是个亟须澄清的概念。在这里效率是指云数据中心&#xff08;我们将在后文中介绍其定义&#xff09;中的IT设备资源利用率&#xff0c;其中最具有代表性的指标就是…

【终端美化】Ubuntu 下 Zsh 与 Oh-My-Zsh 美化与插件配置指南

目录 1. 检查是否已安装 zsh2. 安装 zsh3. 设置 zsh 为默认 Shell4. 安装 oh-my-zsh4.1 使用 curl 安装4.2 使用 wget 安装&#xff08;如果 curl 不可用&#xff09;4.3 迁移 Bash 自定义配置到 Zsh打开Files并显示隐藏文件复制需要的配置内容粘贴到 Zsh 配置文件保存并关闭文…

Spring Boot与MyBatis-Plus的高效集成

Spring Boot与MyBatis-Plus的高效集成 引言 在现代 Java 开发中&#xff0c;MyBatis-Plus 作为 MyBatis 的增强工具&#xff0c;以其简化 CRUD 操作和无需编写 XML 映射文件的特点&#xff0c;受到了开发者的青睐。本篇文章将带你一步步整合 Spring Boot 与 MyBatis-Plus&…

html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…

【Python】爬虫实战:高效爬取电影网站信息指南(涵盖了诸多学习内容)

本期目录 1 爬取思路 2 爬虫过程 2.1 网址 2.2 查看网页代码 3 爬取数据 3.1 导入包 3.2 爬取代码 01 爬取思路 \*- 第一步&#xff0c;获取页面内容\*- 第二步&#xff1a;解析并获取单个项目链接 \*- 第三步&#xff1a;获取子页面内容 \*- 第四步&#xff1a;解析…

SpringBoot多文件上传

多文件上传是在单文件上传的基础上修改而来&#xff0c;不了解单文件上传可以参考上一篇。以下在将修改部分展示如下&#xff1a; 一、修改upload.html文件&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title&g…

[RabbitMQ] 重试机制+TTL+死信队列

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

Prometheus结合K8s(二)使用

上一篇介绍了如何搭建 Prometheus结合K8s&#xff08;一&#xff09;搭建-CSDN博客&#xff0c;这章介绍使用 页面访问 kubectl get svc -n prom 看promeheus和granfana的端口访问页面 Prometheus 点击status—target&#xff0c;可以看到metrics的数据来源&#xff0c;即各…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-05

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-05 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-05目录1. LLM App Squatting and Cloning2. Improving Grapheme-to-Phoneme Conversion through In-Context Knowledge3. A Comp…

【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作

1.实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法&#xff0c;以及通过理论课学习与实验参考书的帮助&#xff0c;熟练掌握使用T-SQL语句和交互式方法对数据表进行插入数据、修改数据、删除数据等等的操作&#xff1b;作为后续实验的基础&#xff0c;根据实验要求重…

LDR6020驱动的Type-C接口显示器解决方案

一、引言 随着科技的飞速发展&#xff0c;Type-C接口凭借其高速数据传输、强大的电力传输能力以及便捷的正反可插设计&#xff0c;正逐渐成为现代电子设备的主流接口标准。在显示器领域&#xff0c;Type-C接口的引入不仅简化了线缆连接&#xff0c;还为用户带来了更丰富的功能…

Spring |(四)IoC/DI配置管理第三方bean

文章目录 &#x1f4da;数据源对象管理&#x1f407;环境准备&#x1f407;实现Druid管理&#x1f407;实现C3P0管理 &#x1f4da;加载properties文件&#x1f407;第三方bean属性优化&#x1f407;读取单个属性 学习来源&#xff1a;黑马程序员SSM框架教程_SpringSpringMVCMa…

三十一、构建完善微服务——API 网关

一、API 网关基础 系统拆分为微服务后&#xff0c;内部的微服务之间是互联互通的&#xff0c;相互之间的访问都是点对点的。如果外部系统想调用系统的某个功能&#xff0c;也采取点对点的方式&#xff0c;则外部系统会非常“头大”。因为在外部系统看来&#xff0c;它不需要也没…

(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统

摘 要 大数据时代下&#xff0c;数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求&#xff0c;利用互联网服务于其他行业&#xff0c;促进生产&#xff0c;已经是成为一种势不可挡的趋势。在大学生在线计算机类专业考研学习网站管理的要求下&#xff0c;开发一…

社交电商专业赋能高校教育与产业协同发展:定制开发AI智能名片及2+1链动商城小程序的创新驱动

摘要&#xff1a;本文围绕社交电商有望成为高校常态专业这一趋势展开深入探讨&#xff0c;剖析国家政策认可下其学科发展前景&#xff0c;着重阐述在专业建设进程中面临的师资短缺及实践教学难题。通过引入定制开发AI智能名片与21链动商城小程序&#xff0c;探究如何借助这些新…

Linux各种并发服务器优缺点

本文旨在介绍针对“无并发C/S模型”改进的方法总结以及各种改进方法的优缺点&#xff0c;具体函数的实现并不介绍。 1. 无并发C/S模型 创建服务器流程分析&#xff1a; socket()创建服务器的监听套接字bind()将服务器给服务器的监听套接字绑定IP地址和Port端口号listen()设置…