字符串经典问题

1. 验证回文串

验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

示例 1:

输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。

1.1 先转换为都是小写的字符串,然后比较是否是回文串

首先根据题目的条件,先使用StringBuilder来存储小写字符串,如果s里面不是小写那么就跳过,可以使用Character.isLetterOrDigit()判断是否为字符,然后使用toLowerCase转换成小写,然后就都是小写的字符串,进行字符串回文比较。

    public boolean isPalindrome(String s) {StringBuilder sb = new StringBuilder();for(int i=0;i<s.length();i++){char c =s.charAt(i);if(Character.isLetterOrDigit(c)){sb.append(Character.toLowerCase(c));}}String str = sb.toString();int left =0;int right = str.length()-1;while(left<right){if(str.charAt(left) != str.charAt(right)){return false;}left++;right--;}return true;}

在这里插入图片描述
总的时间复杂度时O(n),空间复杂度O(n)

不过这里我还有个想法,就是一次循环,碰到,空格就跳过,然后将字符转为小写使用双指针进行比较,这样就可以使用一次遍历。

1.2 一次循环

  public boolean isPalindrome(String s) {int n =s.length();int left =0;int right = n-1;while(left<right){while(left<right && !Character.isLetterOrDigit(s.charAt(left))){++left;}while(left<right && !Character.isLetterOrDigit(s.charAt(right))){--right;}if(left<right){if(Character.toLowerCase(s.charAt(left) ) != Character.toLowerCase(s.charAt(right))){return false;}++left;--right;}}return true;}

这一题如果知道了isLetterOrDigit,就比较简单了,不需要使用额外的判断。

2. 字符串中的第一个唯一字符

字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:

输入: s = “leetcode”
输出: 0
示例 2:

输入: s = “loveleetcode”
输出: 2
示例 3:

输入: s = “aabb”
输出: -1

2.1 HashMap

统计每个字符出现的次数,使用hashmap比较合适,然后遍历字符串找到对应的map里面值为1的结果,就是不重复的字符。

    public int firstUniqChar(String s) {HashMap<Character,Integer> map = new HashMap<>();for(int i=0;i<s.length();i++){map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);}for(int i=0;i<s.length();i++){if(map.get(s.charAt(i))==1){return i;}}return -1;}

3. 有效的字母异位词

有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

3.1 字符数组排序

刚看到这个方法的时候还是有点没想到,因为将字符经过排序后都是按照一定顺序排列的,只需要将两个字符串排序后的结果比较就可以了。

    public boolean isAnagram(String s, String t) {char [] ch1 = s.toCharArray();char [] ch2 = t.toCharArray();Arrays.sort(ch1);Arrays.sort(ch2);return new String(ch1).equals(new String(ch2));}

3.2 哈希表

题目提示了统计字符出现的次数,很显然使用哈希表。

    public boolean isAnagram(String s, String t) {if(s.length()!=t.length()) return false;char [] ch1 = s.toCharArray();Map<Character,Integer> map1 = getMapStr(s);Map<Character,Integer> map2 = getMapStr(t);for(char ch: ch1){if(!map2.containsKey(ch) || map1.get(ch) != map2.get(ch)){return false;}}return true;}private Map<Character,Integer> getMapStr(String str){char [] chars = str.toCharArray();Map<Character,Integer> map = new HashMap<>();for(char ch:chars){map.put(ch,map.getOrDefault(ch,0)+1);}return map;}

但是这个方法在力扣里面测试有个数据跑不通。

3.3 哈希映射

首先先设置一个26位长的数组,然后这个数组里面下标就对应着字符串里面的下标,然后每次遍历的时候都要将同一个位置的元素如果s里面存在那么数组对应元素的个数就自增,t里面也对应这个元素就自减,如果最后每位上的元素值都是0,就意味着是一样的。

    public boolean isAnagram(String s, String t) {if(s.length()!=t.length()) return false;int  [] res = new int [26];for(int i=0;i<s.length();i++){res[s.charAt(i) - 'a']++;res[t.charAt(i) - 'a']--;}for(int i=0;i<26;i++){if(res[i]!=0){return false;}}return true;
}   

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

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

相关文章

项目部署之后页面没有刷新怎么办?

最近项目部署成功之后&#xff0c;突然产品找我&#xff0c;上线之后&#xff0c;页面没有生效&#xff0c;这是怎么回事&#xff1f;我这是第一次部署这个项目,也不太清楚历史问题,接下来就慢慢寻找答案吧, 如果心急的可以直接看后面的总结&#xff0c;下面我们好好聊聊缓存的…

【RuoYi移动端】uniApp导入和引用uView2.0插件

一、打开uiew官网 安装 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI&#xff0c;是 uni-app 生态最优秀的 UI 框架&#xff0c;全面的组件和便捷的工具会让您信手拈来&#xff0c;如鱼得水https://uviewui.com/components/install.html 也可直…

基于Java+SpringBoot+Vue前后端分离在线考试与学习交流网页平台设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

SpringSession

Spring Session 是 Spring 的项目之一。Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案&#xff0c;默认采用外置的 Redis 来存储 Session 数据&#xff0c;以此来解决 Session 共享的 问题。(springsession储存session数据的方式有很多&#xff0c;我们常…

excel中两列数据生成折线图

WPS中excel的两列数据&#xff0c;第一列为x轴&#xff0c;第二列为y轴&#xff0c;生成折线图&#xff0c;并生成拟合函数。 1.选中两列数据&#xff0c;右击选择插入图表&#xff0c;选择XY&#xff08;散点图&#xff09;&#xff0c;生成散点折线图 2.选中图中散点&#x…

SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基…

Web服务器基础 http协议

文章目录 1.Web基础1.1MIME1.2 URI 和 URL1.2.1定义1.2.2两者的区别 2.静态资源和动态资源2.1 静态资源2.2 动态资源 3.HTTP协议3.1HTTP协议简介3.2HTTP协议的版本及区别3.2.1http协议版本3.2.2http1.0和1.1的区别 3.3HTTP请求报文3.4HTTP请求访问的过程1、建立连接&#xff1a…

服务器CPU飚高排查

排查思路 当正在运行的Java服务导致服务器的CPU突然飙高时&#xff0c;我们该如何排查定位到哪个接口的哪行代码导致CPU飙高的问题呢&#xff1f;我主要提供两个方案&#xff1a; jstackarthas 准备工作 代码准备 现在需要准备一段可以让服务器CPU飙高的代码以及把代码部署…

Go framework-Kratos

目录 一、Go framework 1、Kratos 介绍 1.1、Kratos 框架开发依赖安装 2、初始化 Kratos 项目 3、使用 Protobuf 、生成 Go 代码 3.1、增加proto文件模板 3.2、修改proto文件模板 3.3、根据修改完的模板文件生成客户端代码 3.4、根据修改完的模板文件生成服务端代码 …

Windows平台Unity下播放RTSP或RTMP如何开启硬解码?

我们在做Windows平台Unity播放RTMP或RTSP的时候&#xff0c;遇到这样的问题&#xff0c;比如展会、安防监控等场景下&#xff0c;需要同时播放多路RTMP或RTSP流&#xff0c;这样对设备性能&#xff0c;提出来更高的要求。 虽然我们软解码&#xff0c;已经做的资源占有非常低了…

在外SSH远程连接macOS服务器

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

MySQL—MySQL的NULL值是怎么存放的

一、引言 1、MySQL数据存放在哪个文件&#xff1f; 创建一个数据库会产生三种格式的文件&#xff0c;分别是.opt格式、.frm格式、.ibd格式。 opt格式&#xff1a;用来存储当前数据库的默认字符集和字符校验规则。 frm格式&#xff1a;该文件是用来保存每个表的元数据信息的&…

ChatGPT⼊门到精通(1):ChatGPT 是什么

⼀、直观感受 1、公司 OpenAI&#xff08;美国&#xff09; 2、官⽅⽹站 3、登录ChatGPT ![在这里插入图片描述](https://img-blog.csdnimg.cn/26901096553a4ba0a5c88c49b2601e6a.png 填⼊帐号、密码&#xff0c;点击登录。登录成功&#xff0c;如下 3、和ChatGPT对话 开始…

Llama-2大模型本地部署研究与应用测试

最近在研究自然语言处理过程中&#xff0c;正好接触到到大模型&#xff0c;特别是在年初chatgpt引来的一大波AIGC热潮以来&#xff0c;一直都想着如何利用大模型帮助企业的各项业务工作&#xff0c;比如智能检索、方案设计、智能推荐、智能客服、代码设计等等&#xff0c;总得感…

四信5G智慧交通方案

5G是第五代移动通信技术的简称&#xff0c;是具有高速率低时延和大连接特点的新一代宽带移动通信技术&#xff0c;是实现智慧交通中的“车、路、人、环境”等交通要素互联互通的网络基础设施。相比以往的移动通信网络&#xff0c;5G网络以一种灵活部署的架构提供10Gbps以上的带…

Python中的API构建指南:在Flask中进行API开发

原文&#xff1a;Python中的API构建指南&#xff1a;在Flask中进行API开发 - 知乎 如何实现从一个软件与另一个软件的通信交互&#xff1f;就像我们的APP&#xff0c;如何实现微信支付、苹果支付&#xff1f; 其实&#xff0c;我们只需要一个API。 API&#xff08;应用程序编…

4G模组EC20 网卡udhcpc获取IP但是没有设置IP

使能网卡&#xff1a; ifconfig usb0 up dhcp获取ip&#xff0c;虽然没有报error&#xff0c;但是很显然没有设置进配置 获取ip命令&#xff1a;udhcpc -i usb0 非正常现象&#xff1a; 正常现象&#xff1a; 解决方法&#xff1a; &#xff08;1&#xff09;rootfs 创建文件夹…

Qt应用开发(基础篇)——富文本浏览器 QTextBrowser

一、前言 QTextBrowser类继承于QTextEdit&#xff0c;是一个具有超文本导航的富文本浏览器。 框架类 QFramehttps://blog.csdn.net/u014491932/article/details/132188655 滚屏区域基类 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486 文…

保姆级使用vmware安装Ubuntu-server版

保姆级VMware安装Ubuntu20服务器版 文章目录 保姆级VMware安装Ubuntu20服务器版前期准备一、安装vmware二、下载Ubuntu镜像 VMware安装Ubuntu201. 启动Workstation Pro或者Workstation Player,进入软件后新建一个虚拟机2. 进入引导界面选择默认的即可3. 点击下一步即可4. 选择操…

AIGC人工智能涉及三十六职业,看看有没有你的职业(二)

文章目录 如何生成IP盲盒 设计儿童节海报 制作商用矢量插画 设计徽章 图片融合 后缀参数 Stylize 风格化 赛博朋克头像 中国风瓷娃娃 生成线稿 制作时尚音乐唱片封面 T恤图案设计-告白气球 引领时尚潮流的服装设计之旅 独一无二的包包奇迹 手机壳设计探险 如何生…