文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 暴力枚举
    • 2.2 DP

1. 题目

给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是 t 串的子串。
换言之,请你找到 s 和 t 串中 恰好 只有一个字符不同子字符串对的数目。

比方说, “computer” 和 “computation” 加粗部分只有一个字符不同: 'e'/'a' ,所以这一对子字符串会给答案加 1 。

请你返回满足上述条件的不同子字符串对数目。

一个 子字符串 是一个字符串中连续的字符。

示例 1:
输入:s = "aba", t = "baba"
输出:6
解释:以下为只相差 1 个字符的 s 和 t 串的子字符串对:
("aba", "baba")
("aba", "baba")
("aba", "baba")
("aba", "baba")
("aba", "baba")
("aba", "baba")
加粗部分分别表示 s 和 t 串选出来的子字符串。示例 2:
输入:s = "ab", t = "bb"
输出:3
解释:以下为只相差 1 个字符的 s 和 t 串的子字符串对:
("ab", "bb")
("ab", "bb")
("ab", "bb")
加粗部分分别表示 s 和 t 串选出来的子字符串。示例 3:
输入:s = "a", t = "a"
输出:0示例 4:
输入:s = "abe", t = "bbc"
输出:10提示:
1 <= s.length, t.length <= 100
s 和 t 都只包含小写英文字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-substrings-that-differ-by-one-character
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 暴力枚举

  • 枚举 s 的子串的开始位置 i, t 的子串的开始位置 j
  • 往后遍历,不同的字符个数为 1 的时候,答案 +1
  • 时间复杂度 O(len(s)∗len(t)∗min(len(s),len(t)))O(len(s)*len(t)*min(len(s), len(t)))O(len(s)∗len(t)∗min(len(s),len(t)))
class Solution {public:int countSubstrings(string s, string t) {int ans = 0, diff;for(int i = 0; i < s.size(); ++i){for(int j = 0; j < t.size(); ++j){diff = 0;for(int k = 0; i+k < s.size() && j+k < t.size(); ++k){if(s[i+k] != t[j+k])diff++;if(diff == 1)ans++;else if(diff > 1)break;}}}return ans;}
};

0 ms 6.4 MB

2.2 DP

参考 Zhenghao-Liu 大佬的解法

  • same[i][j], diff[i][j] 分别表示以 i 结尾的 s 的子串,以 j 结尾的 t 的子串,相同的数量,有一个字符不同的数量
  • 时间复杂度 O(len(s)∗len(t))O(len(s)*len(t))O(len(s)∗len(t))
class Solution {public:int countSubstrings(string s, string t) {int ans = 0, m = s.size(), n = t.size();vector<vector<int>> same(m, vector<int>(n, 0)),diff(m, vector<int>(n, 0));for(int i = 0; i < m; ++i){  //初始化same[i][0] = s[i]==t[0] ? 1 : 0;diff[i][0] = s[i]==t[0] ? 0 : 1;}for(int j = 0; j < n; ++j){   //初始化same[0][j] = s[0]==t[j] ? 1 : 0;diff[0][j] = s[0]==t[j] ? 0 : 1;}for(int i = 1; i < m; ++i){for(int j = 1; j < n; ++j){if(s[i] == t[j]){   //字符相同same[i][j] = same[i-1][j-1]+1;// 前面的数量跟我组合,以及 单个字符diff[i][j] = diff[i-1][j-1];}elsediff[i][j] = same[i-1][j-1] + 1;}}for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j){ans += diff[i][j];}}return ans;}
};

4 ms 7.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1638. 统计只差一个字符的子串数目(DP)相关推荐

  1. 1638 统计只差一个字符的子串数目(动态规划)

    1. 问题描述: 给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换一个不同字符以后,是 t 串的子串.换言之,请你找到 s 和 t 串中恰好只有一个字符不同的子字符串对 ...

  2. 【算法题】1638. 统计只差一个字符的子串数目

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你两个字符串 s 和 t ,请你找出 ...

  3. LeetCode 1180. 统计只含单一字母的子串

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 S,返回只含 单一字母 的子串个数. 示例 1: 输入: "aaaba" 输出: 8 解释: 只含单一字母的子串分别是 ...

  4. Leetcode 5067.统计只含单一字母的子串

    Time: 20190908 Type: Easy 链接:https://leetcode-cn.com/contest/biweekly-contest-8/problems/count-subst ...

  5. 你和大神之间只差一个高效工具

    阅读原文:你和大神之间只差一个高效工具 不可否认,顺手的工具能帮助我们提高工作的效率,这里我将列出我数年所用到过的高效工具. 1.录屏Gif软件:ScreenToGif 推荐:ScreenToGif正 ...

  6. 成为数据专家,你只差一个Quick Insights的距离

    成为数据专家,你只差一个Quick Insights的距离 微软亚洲研究院 2015年12月22日   身处如今的大数据时代,你真的知道如何处理数据和分析数据吗?或许那些被你忽视的数据背后就暗藏着重要 ...

  7. 你和PPT高手之间,就只差一个iSlide,新版本支持WPS、Office

    你和PPT高手之间,就只差一个iSlide文中介绍了islide的几个功能和示例应用,很受欢迎.后来有朋友留言,新版的islide支持WPS,故更新个提示.具体功能使用见下图,获取方式为访问网址 ht ...

  8. C4D电商促销活动背景素材|设计提升,只差一个背景

    下半年往往是电商设计师最繁忙的时期,忙完双11.紧接着双12.年货节等重量级节日接踵而来.随着审美流行趋势的变化,电商设计的新鲜创意也层出不穷,有不少商家都应用了C4D来辅助视觉创意的表达.但不是每一 ...

  9. 【人物专访】从12K到20+K,中间只差一个来学吧

    [人物专访]从12K到20+K,中间只差一个来学吧 原创: 李会会 来学吧 3天前 编者注:初始的时候,只知道他是乐产功场®黄埔15期.乐享功场®西点二期的学员:乐观.积极是我对他的第一印象,在问他说 ...

最新文章

  1. jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]
  2. 新手探索NLP(五)
  3. 数据降维(特征提取)和特征选择有什么区别?
  4. ArcGIS Server 9.2 on Solaris/Linux 安装可能出现的问题
  5. 在Android Studio进行“简单配置”单元测试(Android Junit)
  6. (案例)使用Cookie保存用户最后一次访问的时间
  7. Sass学习之路(3)——Sass编译
  8. mysql odbc.ini_关于unixodbc中odbc.ini和odbcinst.ini的介绍
  9. 解密五种AI筛选的“新冠”新药:能靶向病毒细胞侵入的蛋白酶
  10. 快乐学习 Ionic Framework+PhoneGap 手册1-5 {IO开关}
  11. 力扣762.二进制表示中质数个计算置位
  12. Spring-IOC之BeanDefinitionHolder
  13. 浅谈VMD---变分模态分解
  14. pr剪辑视频转码问题以及子剪辑
  15. STM32与FPGA Cyclone IV芯片fsmc通信
  16. 复习单片机:点亮LED(内含实物图+硬件设计+软件编程+原始代码)
  17. 阿里数据仓库-数据模型建设方法总结(全)
  18. 使用Python进行并发编程
  19. java基础(javaBase)推箱子,课程总结
  20. ENVI经验|基于多源遥感影像的红树林范围提取4-面向对象分类

热门文章

  1. 解决AttributeError: 'str' object has no attribute 'decode'报错问题
  2. VS项目属性的一些配置项的总结(持续增加。。。)
  3. java微信web支付开发_微信支付java开发详细第三方支付功能开发之支付宝web端支...
  4. Linux设备驱动模型1——简介和底层架构
  5. linux上安装fio教程,fio工具安装及使用
  6. UEditor编辑器第一次赋值失败的解决方法
  7. 【转】JMeter学习(十三)分布式部署
  8. spring-data-mongodb查询结果返回指定字段
  9. div中iframe高度自适应问题
  10. 项目管理——文档的重要性