字符串经典问题

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.mzph.cn/news/53321.shtml

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

相关文章

Vue2向Vue3过度核心技术computed计算属性

目录 1 computed计算属性1.1 概念1.2 语法1.3 注意1.4.案例1.5.代码准备 2 computed计算属性 VS methods方法2.1 computed计算属性2.2 methods计算属性2.3 计算属性的优势2.4 总结 3 计算属性的完整写法 1 computed计算属性 1.1 概念 基于现有的数据&#xff0c;计算出来的新属…

探索AIGC人工智能(Midjourney篇)(一)

文章目录 案例图片 Midjourney注册 创建Discord账号 下载客户端 添加Midjourney到自己的服务器 用Midjourney画一只会飞的鸭子 Midjourney绘画指令 Midjourney绘画指令_激发Midjourney的创造力 Midjourney绘画指令_Seed指令 Midjourney光线关键词&#xff0c;打造震撼…

XGBoost,NVIDIA是什么

目录 XGBoost 算法层面 什么是 XGBoost GBDT是什么 GBDT中的GB 为何选择 XGBoost&#xff1f; XGBoost 的优势和属性 XGBoost 和数据科学家 为何 XGBoost 在 GPU 上表现更出色 XGBoost RAPIDS GPU 加速的 XGBoost NVIDIA是什么 使用 Spark XGBoost 的 GPU 加速端…

晨控CK-GW208与三菱L系列PLC以TCP通讯手册

晨控CK-GW208是一款支持标准工业以太网协议的IO-LINK主站网关&#xff0c;方便用户快速便捷的集成到 PLC 等控制系统中。 CK-GW208主站网关集成 8 路 IO-LINK 通信端口&#xff0c;采用即插即用模式&#xff0c;无需繁琐的配置&#xff0c;减轻现场安装调试的工作量。为了满足…

如何撰写具有传播力的品牌软文?

企业为了能将自己的品牌宣传推广出去&#xff0c;不论是在品牌初创还是成熟阶段都会撰写很多的新闻软文稿件发布在各大媒体平台上&#xff0c;为的就是能起到持续宣传和影响的效果&#xff01; 软文不但要求短小精悍&#xff0c;更注重内容的精准。不管是什么类型的文章&#…

POSTGRESQL 如何用系统函数来诊断权限问题

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

2023MySQL+MyBatis知识点整理

文章目录 主键 外键 的区别&#xff1f;什么是范式&#xff1f;什么是反范式&#xff1f;什么是事务&#xff1f;MySQL事务隔离级别&#xff1f;MySQL事务默认提交模式&#xff1f;MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗&#xff1f;MySQL支持哪几种时间类型&a…

springcloud3 GateWay章节-Nacos+gateway动态路由负载均衡4

一 工程结构 1.1 工程 1.2 搭建gatewayapi工程 1.pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--gateway--&g…

复习之web服务器--apache

PS&#xff1a;Vim复制小技巧 一、实验环境 两台虚拟机 (nodea,nodeb)配置ip搭建软件仓库关闭selinux [rootftp Desktop]# hostnamectl set-hostname nodea.westos.org [rootftp Desktop]# hostname nodea.westos.org [rootftp Desktop]# ifconfig enp1s0: flags4163<UP,B…

大数据开发要学习什么?学完又能做什么

学习大数据需要掌握什么语言基础&#xff1f; 1、Java基础 大数据框架90%以上都是使用Java开发语言&#xff0c;所以如果要学习大数据技术&#xff0c;首先要掌握Java基础语法以及JavaEE方向的相关知识。 2、MySQL数据库 这是学习大数据必须掌握的知识之一。数据的操作语言是…

Vue2向Vue3过度核心技术组件通信

目录 1 组件基础知识scoped解决样式冲突1.1 默认情况&#xff1a;1.2 代码演示1.3 scoped原理1.4 总结 2 组件基础知识data必须是一个函数2.1 data为什么要写成函数2.2 代码演示2.3 总结 3 组件通信3.1 什么是组件通信&#xff1f;3.2 组件之间如何通信3.3 组件关系分类3.4 通信…

为什么使用Nacos而不是Eureka(Nacos和Eureka的区别)

文章目录 前言一、Eureka是什么&#xff1f;二、Nacos是什么&#xff1f;三、Nacos和Eureka的区别3.1 支持的CAP3.2连接方式3.3 服务异常剔除3.4 操作实例方式 总结 前言 为什么如今微服务注册中心用Nacos相对比用Eureka的多了&#xff1f;本文章将介绍他们之间的区别和优缺点…

【element-ui】el-dialog改变宽度

dialog默认宽度为父元素的50%&#xff0c;这就导致在移动端会非常的窄&#xff0c;如图1&#xff0c;需要限定宽度。 解决方法&#xff1a;添加custom-class属性&#xff0c;然后在style中编写样式&#xff0c;注意&#xff0c;如果有scoped限定&#xff0c;需要加::v-deep &l…

浅谈Spark的RDD、部署模式

一、RDD Spark RDD&#xff08;弹性分布式数据集&#xff09;&#xff0c;弹性是指Spark可以通过重新计算来自动重建丢失的分区。 从本质上讲&#xff0c;RDD 是数据元素的不可变分布式集合&#xff0c;跨集群中的节点进行分区&#xff0c;可以与提供转换和操作的低级 API 并行…

到目前为止,所有的关于安卓14的详细介绍

安卓14现在可能已经不远了,谷歌已经进行了五次测试,通常10月份的发布窗口时间很快就会到来。但除了在谷歌I/O 2023上进行简短讨论外,谷歌对正在发生的变化相对沉默。 可以肯定地说,Android 14不会是操作系统有史以来最大的一系列变化,但有很多改进和变化可以让Android保持…

【计算机网络】HTTPs 传输流程

HTTPS和HTTP的区别 1、HTTP协议传输的数据都是未加密的&#xff0c;是明文的&#xff0c;使用HTTP协议传输隐私信息非常不安 HTTPS协议是由SSLHTTP协议构建的可进行加密传输、身份认证的网络协议&#xff0c;要比http协议安全。 2、HTTPS协议需要到CA申请证书&#xff0c;一般…

apache的ab工具测试网页优化效果速度以及服务器承载

今天为大家介绍一款apache自带的一种的测试网页优化效果速度以及服务器承载的工具——ab.exe。 大家在工作中或者开发中可以使用apache的ab工具来测试自己的网站并发量大小&#xff0c;和某个页面的访问时间。 一、基本用法 如果你是用的是apache的话&#xff0c;那么只要进…

科技资讯|三星再申请智能戒指商标,智能穿戴进入更小型化发展

三星正在积极扩展可穿戴设备生态&#xff0c;近日向英国知识产权局提交了名为“Samsung Curio”的新商标&#xff0c;其分类为“Class 9”&#xff0c;可能会用于未来的智能戒指。 智能戒指&#xff1a; 可穿戴计算机本质上的智能手环、智能项链、智能眼镜和智能戒指&#xff1…

【计算机网络】日志与守护进程

文章目录 日志日志的创建logmessage 函数日志左边部分实现日志右边部分实现 完整代码log.hpp(整体实现)err.hpp (错误信息枚举&#xff09; 守护进程PGID SID TTY 的介绍shell中控制进程组的方式结论 为什么要有守护进程存在&#xff1f;守护进程的创建使用守护进程的条件守护进…

算法 for GAMES

栈 #include <iostream> #include <stack>int main() {std::stack<int> intStack;// 压入元素到堆栈intStack.push(5);intStack.push(10);intStack.push(15);// 查看堆栈顶部元素std::cout << "Top element: " << intStack.top() <…