目录
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。