目录
[3083. 字符串及其反转中是否存在同一子字符串](#3083. 字符串及其反转中是否存在同一子字符串)
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
仅由小写英文字母组成。
实现代码与解析:
二进制哈希
java
class Solution {
public boolean isSubstringPresent(String s) {
char[] cs = s.toCharArray();
int[] hash = new int[26];
for (int i = 1; i < cs.length; i++) {
int x = cs[i - 1] - 'a';
int y = cs[i] - 'a';
hash[x] |= 1 << y;
if ((hash[y] >> x & 1) > 0) {
return true;
}
}
return false;
}
}
原理思路:
hash判断一下长度为2的子串是否已经被遍历过即可。因为字母有限,可以直接用二进制来代表一个纬度的hash。