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

2024-03-01 09:12:21 浏览数 (1)

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("%dn", ret);
				return 0;
			}

0 人点赞