LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
目录
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
仅由小写英文字母组成。
实现代码与解析:
二进制哈希
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。