给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是 t 串的子串。换言之,请你找到 s 和 t 串中 恰好 只有一个字符不同的子字符串对的数目。
比方说, "computer" and "computation" 只有一个字符不同: 'e'/'a' ,所以这一对子字符串会给答案加 1 。
请你返回满足上述条件的不同子字符串对数目。
一个 子字符串 是一个字符串中连续的字符。
题目链接:https://leetcode.cn/problems/count-substrings-that-differ-by-one-character/
# 解题思路
对 s,t 的每个下标开始位置进行枚举,如果当前字符相同,继续,否则,不同字符对加一,同时答案也 +1
# 提交结果
# 代码
class Solution { | |
public int countSubstrings(String s, String t) { | |
char[] schs = s.toCharArray(); | |
char[] tchs = t.toCharArray(); | |
int sn = schs.length, tn = tchs.length; | |
int ans = 0; | |
for (int i = 0; i < sn; ++i) { | |
for (int j = 0; j < tn; ++j) { | |
int k = 0; | |
// 记录不同字符对的数量 | |
int diff = 0; | |
while (i + k < sn && j + k < tn) { | |
// 字符不相同,diff +1 | |
if (schs[i + k] != tchs[j + k]) | |
++diff; | |
if (diff == 1) { | |
// 仅有一个不同的字符对,答案 +1 | |
++ans; | |
} else if (diff > 1) { | |
// 不同字符对超过 1,直接结束本次循环 | |
break; | |
} | |
++k; | |
} | |
} | |
} | |
return ans; | |
} | |
} |