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

【LetMeFly】3083.字符串及其反转中是否存在同一子字符串:哈希表

力扣题目链接:https://leetcode.cn/problems/existence-of-a-substring-in-a-string-and-its-reverse/

给你一个字符串 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 仅由小写英文字母组成。

解题方法:哈希表

开辟一个二维数组visited,其中visited[i][j]表示长度为2的子字符串('a' + i)('a' + j)是否出现过。

遍历字符串,将每个长度为2的子字符串加入哈希表中。若这个子字符串翻转后的字符串在哈希表中出现过,则返回true

最终未返回则返回false

  • 时间复杂度$O(len(s))$
  • 空间复杂度$O(C^2)$,其中$C=26$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
* @Author: LetMeFly
* @Date: 2024-12-26 15:37:22
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2024-12-26 15:39:20
*/
class Solution {
public:
bool isSubstringPresent(string s) {
bool visited[26][26] = {false};
for (int i = 1; i < s.size(); i++) {
visited[s[i - 1] - 'a'][s[i] - 'a'] = true;
if (visited[s[i] - 'a'][s[i - 1] - 'a']) {
return true;
}
}
return false;
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
'''
Author: LetMeFly
Date: 2024-12-26 15:40:00
LastEditors: LetMeFly.xyz
LastEditTime: 2024-12-26 15:41:59
'''
class Solution:
def isSubstringPresent(self, s: str) -> bool:
visited = [[False] * 26 for _ in range(26)]
for i in range(1, len(s)):
visited[ord(s[i - 1]) - ord('a')][ord(s[i]) - ord('a')] = True
if visited[ord(s[i]) - ord('a')][ord(s[i - 1]) - ord('a')]:
return True
return False

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* @Author: LetMeFly
* @Date: 2024-12-26 15:42:36
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2024-12-26 15:44:38
*/
class Solution {
public boolean isSubstringPresent(String s) {
boolean[][] visited = new boolean[26][26];
for (int i = 1; i < s.length(); i++) {
visited[s.charAt(i - 1) - 'a'][s.charAt(i) - 'a'] = true;
if (visited[s.charAt(i) - 'a'][s.charAt(i - 1) - 'a']) {
return true;
}
}
return false;
}
}

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* @Author: LetMeFly
* @Date: 2024-12-26 15:45:02
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2024-12-26 15:47:44
*/
package main

func isSubstringPresent(s string) bool {
var visited [26][26]bool
for i := 1; i < len(s); i++ {
visited[s[i - 1] - 'a'][s[i] - 'a'] = true
if visited[s[i] - 'a'][s[i - 1] - 'a'] {
return true
}
}
return false
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/144746598


3083.字符串及其反转中是否存在同一子字符串
https://blog.letmefly.xyz/2024/12/26/LeetCode 3083.字符串及其反转中是否存在同一子字符串/
作者
Tisfy
发布于
2024年12月26日
许可协议