本文主要是介绍3083. 字符串及其反转中是否存在同一子字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
给你一个字符串 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
仅由小写英文字母组成。
解题思路
-
- 使用
for
循环遍历字符串中的每个字符,循环变量i
从 0 开始,逐渐增加直到字符串的倒数第二个字符为止。
- 使用
-
- 在循环中,使用
includes
方法检查当前字符s[i]
与下一个字符s[i + 1]
组成的子串是否在原始字符串s
中出现过。
- 在循环中,使用
-
- 如果子串存在于原始字符串中,则返回
true
,表示找到了重复的相邻子串。
- 如果子串存在于原始字符串中,则返回
-
- 如果循环结束后仍未找到重复的相邻子串,则返回
false
。
- 如果循环结束后仍未找到重复的相邻子串,则返回
这段代码的时间复杂度为 O(n^2),其中 n 是字符串的长度。因为在每次循环中,都要使用 includes
方法去检查子串是否存在于原始字符串中,而 includes
方法的时间复杂度是 O(n)。因此,总体上是 O(n^2)。
AC代码
/*** @param {string} s* @return {boolean}*/
var isSubstringPresent = function (s) {for (let i = 0; i < s.length - 1; i++) {if (s.includes(s[i + 1] + s[i])) return true;}return false;
};
公众号
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。
这篇关于3083. 字符串及其反转中是否存在同一子字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!