查寻以指定字符开始和结尾的子串数量

查找以指定字符开始和结尾的子串数量

【算法设计与分析基础3.2-9】

在一段给定的文本中查找以A开始,以B结尾的子串的数量(例如,在CABAAXBYA中有4个这样的子串)。

【算法】

以字符‘B’结尾的子串的个数等于字符‘B'左侧字符串中‘A’的数量。

如:

C A B A A X B Y A

       1            2

以第一个‘B’为结尾的子串个数为左侧’A‘的个数,故只有一个子串:AB。

A A A X B Y A

        1            2

字符串中第二个’B'左侧有3个‘A',所以有三个子串,即:ABAAXB, AAXB,AXB。 

【时间复杂度】

只需要遍历一次字符串即可,故时间复杂度为:O(n)

【代码】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int SubString(char *str, int n)
{
	int ANum, sumNum;
	char c;
	ANum = 0;
	sumNum = 0;
	for(int i = 0; i < n; i++)
	{
		if(str[i] == 'A')
			ANum++;
		if(str[i] == 'B')
			sumNum += ANum;
	}
	return sumNum;
}

int main(void)
{
	char str[] = "CABAAXBYA";
	int n = strlen(str);
	printf("%d\n", SubString(str, n));
}