目录
3138. 同位字符串连接的最小长度
题目描述:
实现代码与解析:
枚举:
原理思路:
3138. 同位字符串连接的最小长度
题目描述:
给你一个字符串 s
,它由某个字符串 t
和若干 t
的 同位字符串 连接而成。
请你返回字符串 t
的 最小 可能长度。
同位字符串 指的是重新排列一个单词得到的另外一个字符串,原来字符串中的每个字符在新字符串中都恰好只使用一次。
示例 1:
输入:s = "abba"
输出:2
解释:
一个可能的字符串 t
为 "ba"
。
示例 2:
输入:s = "cdef"
输出:4
解释:
一个可能的字符串 t
为 "cdef"
,注意 t
可能等于 s
。
提示:
1 <= s.length <= 105
s
只包含小写英文字母。
实现代码与解析:
枚举:
class Solution {
public int minAnagramLength(String s) {
char[] cs = s.toCharArray();
int n = cs.length;
int res = 0x3f3f3f3f;
for (int len = 1; len <= n / 2; len++) {
if (n % len != 0) continue;
int[] hash = new int[26];
for (int i = 0; i < len; i++) {
hash[cs[i] - 'a']++;
}
int i;
for (i = len; i < n; i += len) {
int[] cur = new int[26];
for (int j = i; j < i + len; j++) {
cur[cs[j] - 'a']++;
}
if (check(hash, cur)) {
} else break;
}
if (i == n) res = Math.min(res, len);
}
// 如果长度不是长度的一半,那么只能是n了
if (res == 0x3f3f3f3f) res = n;
return res;
}
private boolean check(int[] hash, int[] cur) {
for (int i = 0; i < 26; i++) {
if (hash[i] != cur[i]) return false;
}
return true;
}
}
原理思路:
它由长度相同的子串组成,所以长度只能为n的因子,遍历所有因子,同时判断组成元素是否相同即可,很简单。