leetcode 3083. 字符串及其反转中是否存在同一子字符串 简单

news/2024/12/28 15:51:32/

给你一个字符串 s ,请你判断字符串 s 是否存在一个长度为 2 的子字符串,在其反转后的字符串中也出现。

如果存在这样的子字符串,返回 true;如果不存在,返回 false 。

示例 1:

输入:s = "leetcode"

输出:true

解释:子字符串 "ee" 的长度为 2,它也出现在 reverse(s) == "edocteel" 中。

示例 2:

输入:s = "abcba"

输出:true

解释:所有长度为 2 的子字符串 "ab""bc""cb""ba" 也都出现在 reverse(s) == "abcba" 中。

示例 3:

输入:s = "abcd"

输出:false

解释:字符串 s 中不存在满足「在其反转后的字符串中也出现」且长度为 2 的子字符串。

提示:

  • 1 <= s.length <= 100
  • 字符串 s 仅由小写英文字母组成。

分析:将所有的两位子串视为一个26进制的数,存在哈希表中。之后反向遍历整个字符串,同样将每2位字符转为26进制的数,判断是否在哈希表中出现过即可。

bool isSubstringPresent(char* s) {int l=strlen(s);if(l==1)return false;int temp=(s[0]-'a')*26+s[1]-'a',index=2;int num[10000]={0};num[temp]=1;while(index<l)temp=(temp%26)*26+s[index]-'a',num[temp]=1,index++;int xx=(s[l-1]-'a')*26+s[l-2]-'a';index=l-3;do{if(num[xx]==1)return true;if(index>=0){xx=(xx%26)*26+s[index]-'a',index--;}}while(index>=0);if(num[xx]==1)return true;return false;
}

 题解给出的位运算方法。本质上用一个32位整数的位关系来表示相邻字符。由于只关心字符之间的顺序关系,大小只需要26即可。

bool isSubstringPresent(char* s) {int h[26] = {0};int len = strlen(s);for (int i = 0; i + 1 < len; i++) {int x = s[i] - 'a';int y = s[i + 1] - 'a';h[x] |= (1 << y);if ((h[y] >> x) & 1) {return true;}}return false;
}//作者:力扣官方题解
//链接:https://leetcode.cn/problems/existence-of-a-substring-in-a-string-and-its-reverse/solutions/3016932/zi-fu-chuan-ji-qi-fan-zhuan-zhong-shi-fo-ra8p/
//来源:力扣(LeetCode)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.ppmy.cn/news/1558828.html

相关文章

matlab客户端最新功能:使用vs code的github copilot编写mlx实时脚本文件

Github的copilot可以大大提高编程速率&#xff0c;但是只能在VS code里应用。 对于很多使用matlab的同学来说很不方便。因为vs code打不开.mlx文件. 不过现在有了解决办法。 官方提供了vscode的matlab插件。但是这个插件只能对编写的代码进行高亮和提示&#xff0c;还是没法打…

vscode打开下一个文件的时候上一个文件会关闭

解决方法&#xff1a; 你可以通过设置 workbench.editor.enablePreview 来控制在 VS Code 中打开文件时是否会关闭上一个文件。将其设置为 false 可以防止这种行为。 {"workbench.editor.enablePreview": false } 在设置编辑器中显示 "workbench.editor.enab…

MacroSan 2500_24A配置

双控制器电源同时按下,切记/切记/切记 默认信息 默认地址:192.168.0.210 输入ODSP授权后设置密码## 配置端口 物理资源–>设备–>网口–>eth-1:0:0或eth-2:0:0 创建存储池 存储资源–>存储池 介质类型:混合(支持机械及SSD)全闪(仅支持SSD) RAID类型:CRAID-P(基于磁…

面经zhenyq

如何去实现分层的动画效果&#xff1f; 在Unity中实现分层的动画效果&#xff0c;可以通过Animator的 Layer 功能实现。以下是详细步骤&#xff1a; 1. 什么是分层动画&#xff1f; 分层动画允许在同一个角色的不同部分同时播放独立的动画。例如&#xff1a; 上半身可以播放…

PostgreSQL的一主一从集群搭建部署 (两同步)

一、实验环境 虚拟机名IP身份简称keep-postgres12-node1192.168.122.87主节点node1keep-postgres12-node2192.168.122.89备节点node2keep-postgres12-node3192.168.122.90备节点node3 二、安装数据库 源码包方式&#xff08;主&#xff09; 1、创建用户 [rootkeep-postgre…

Python有哪些常用的库

Python作为一种高级编程语言&#xff0c;拥有丰富的第三方库和工具&#xff0c;这些库和工具涵盖了数据分析、机器学习、Web开发、图像处理、网络爬虫等多个领域。以下是一些常用的Python库&#xff1a; 数据分析与科学计算 NumPy&#xff1a;用于科学计算的基础库&#xff0…

Python数据可视化小项目

英雄联盟S14世界赛选手数据可视化 由于本学期有一门数据可视化课程&#xff0c;课程结课作业要求完成一个数据可视化的小Demo&#xff0c;于是便有了这个小项目&#xff0c;课程老师要求比较简单&#xff0c;只要求熟练运用可视化工具展示数据&#xff0c;并不要求数据来源&am…

VB.NET在 Excel 二次开发中的全面应用

摘要&#xff1a; 本文详细阐述了如何运用VB.NET进行 Excel 的二次开发。首先介绍了开发环境的搭建&#xff0c;包括安装 Visual Studio 及引用 Excel 对象库。接着深入探讨了各种基础操作&#xff0c;如创建 Excel 应用程序对象、打开与操作工作簿、处理工作表与单元格数据等。…