G
N
I
D
A
O
L

给你两个字符串 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

# 提交结果

image.png

# 代码

a
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;
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝