统计只差一个字符的子串数目【LC1638】
给你两个字符串
s和t,请你找出s中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是t串的子串。换言之,请你找到s和t串中 恰好 只有一个字符不同的子字符串对的数目。比方说,
"computer"and"computation"只有一个字符不同:'e'/'a',所以这一对子字符串会给答案加 1 。请你返回满足上述条件的不同子字符串对数目。
一个 子字符串 是一个字符串中连续的字符。
-
思路:枚举
字符串长度最大为100,因此可以枚举s和t每对长度相同的子字符串,记录字符串中不同字符的数目,如果为1,那么答案加1
-
实现
在枚举时,可以枚举子字符串的起点,然后枚举长度,每增加一位判断是否相同,如果不同的数目大于1时,那么以该首字符为首的子字符串不可能满足条件,直接break
class Solution { public int countSubstrings(String s, String t) { int m = s.length(), n = t.length(); int res = 0; for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ int diff = 0; for (int len = 0; i + len < m && j + len < n; len++){ if (s.charAt(i + len) != t.charAt(j + len)){ diff++; } if (diff == 1){ res++; }else if (diff > 1){ break; } } } } return res; } }- 复杂度
- 时间复杂度:O(m∗n∗len)O(m*n*len)O(m∗n∗len)
- 空间复杂度:O(1)O(1)O(1)
- 复杂度

该问题涉及字符串处理,要求找出两个字符串s和t中恰好只有一个字符不同的子字符串对的数目。解决方案是通过双层循环遍历所有可能的子串,记录不同字符的数量,当数量等于1时累加结果。时间复杂度为O(m*n*len),空间复杂度为O(1)。

被折叠的 条评论
为什么被折叠?



