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

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

Leetcode-1638.统计只差一个字符的字串数目

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

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

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

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;
      }
目录
相关文章
|
5月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
132 0
Leetcode第三题(无重复字符的最长子串)
|
2月前
|
存储 算法 C语言
【C语言】字符常量详解
字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。
194 11
|
2月前
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
56 6
|
4月前
|
C语言
C语言字符(串)函数
C语言字符(串)函数
|
5月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
139 8
|
4月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
5月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。
132 4
|
4月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
6月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
74 0

热门文章

最新文章