蓝桥杯 子串简写(暴力)

题目:子串简写

代码1:

cpp 复制代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>

using namespace std;

char c1,c2;
int k;
char s[100010];
int a[100010];
int b[100010];
int cnt;
int main()
{
	scanf("%d",&k);
	scanf("%s",&s);
	getchar();
	int n = strlen(s);
	scanf("%c",&c1);
	getchar();
	scanf("%c",&c2);
	int t1=0,t2=0;
//	cout<<c1<<' '<<c2<<endl;
	for(int i=0;i<n;i++){
		if(s[i] == c1){
			a[t1++] = i;
		}
		if(s[i] == c2){
			b[t2++] = i;
		}
	} 
	
	for(int i=0;i<t1;i++){
		for(int j=0;j<t2;j++){
			if(b[j] - a[i] >= k-1){
				cnt++;
			}
		}
	}
	cout<<cnt<<endl;
	return 0;
}

结果:

代码2:参考网络

cpp 复制代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>

using namespace std;

char c1,c2;
int k;
char s[1000];
int a[1000];
int b[1000];
long long cnt;
int main()
{
	scanf("%d",&k);
	scanf("%s",&s);
	getchar();
	int n = strlen(s);
	scanf("%c",&c1);
	getchar();
	scanf("%c",&c2);
	int t1=0,t2=0;
//	cout<<c1<<' '<<c2<<endl;
	for(int i=0;i<n;i++){
		if(s[i] == c1){
			a[t1++] = i;
		}
		if(s[i] == c2){
			b[t2++] = i;
		}
	} 
	
	for(int i=0;i<t1;i++){
		int temp=0;
		while(b[temp] - a[i] < k - 1 && temp < t2) temp ++;
		if(b[temp] - a[i] >= k - 1) cnt+=t2-temp;
	}
	cout<<cnt<<endl;
	return 0;
}

结果:

相关推荐
快去睡觉~32 分钟前
力扣73:矩阵置零
算法·leetcode·矩阵
小欣加油1 小时前
leetcode 3 无重复字符的最长子串
c++·算法·leetcode
猿究院--王升4 小时前
jvm三色标记
java·jvm·算法
一车小面包4 小时前
逻辑回归 从0到1
算法·机器学习·逻辑回归
tt5555555555555 小时前
字符串与算法题详解:最长回文子串、IP 地址转换、字符串排序、蛇形矩阵与字符串加密
c++·算法·矩阵
元亓亓亓6 小时前
LeetCode热题100--101. 对称二叉树--简单
算法·leetcode·职场和发展
不会学习?7 小时前
算法03 归并分治
算法
NuyoahC7 小时前
笔试——Day43
c++·算法·笔试
2301_821919928 小时前
决策树8.19
算法·决策树·机器学习
秋难降8 小时前
别再用暴力排序了!大小顶堆让「取极值」效率飙升至 O (log n)
python·算法·排序算法