前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Leetcode-1638.统计只差一个字符的字串数目(C语言)】

【Leetcode-1638.统计只差一个字符的字串数目(C语言)】

作者头像
YoungMLet
发布2024-03-01 09:12:21
800
发布2024-03-01 09:12:21
举报
文章被收录于专栏:C++/Linux
Leetcode-1638.统计只差一个字符的字串数目

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

我们的思路是,定义两个指针,一个为s子串的起点,一个为t子串的起点,然后定义一个指针k为s和t子串的长度,遍历k的位置然后比较长度为k的子串是否满足题目要求;

下面我们看代码以及注释:

代码语言:javascript
复制
			int countSubstrings(char* s, char* t) 
			{
			    //先计算s和t的长度
			    int lens = strlen(s);
			    int lent = strlen(t);
			    //count统计符合题要的答案
			    int count = 0;
			    //给定i的起点
			    for (int i = 0; i < lens; i++)
			    {
			        //给定j的起点
			        for (int j = 0; j < lent; j++)
			        {
			            //flag用来记录当前这个符合要求的字符串,当他还是符合题意的时候会是1,count也会++
			            //当它再次遇到下一个不同的字符的时候,会变成2,那就结束当前的字符串,这个字符串就是符合题意的子字符串
			            //每次结束当前字符串的时候flag要重新置为0,继续寻找符合题意的下一个子字符串
			            int flag = 0;
			            //给定k的起点
			            for (int k = 0; i + k < lens && j + k < lent; k++)
			            {
			                //符合只有一个字符不同的时候flag++
			                if (s[i + k] != t[j + k])
			                {
			                    flag++;
			                }
			                //当这个子字符串有两个字符不同时不满足题意,退出当前子字符串的遍历
			                if (flag > 1)
			                {
			                    break;
			                }
			                else if (flag == 1)
			                {
			                    count++;
			                }
			            }
			        }
			    }
			    return count;
			}
			
			int main()
			{
			    char s[] = "aba";
			    char t[] = "baba";
			    int ret = countSubstrings(s, t);
			    printf("%d\n", ret);
				return 0;
			}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode-1638.统计只差一个字符的字串数目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档