(悬赏3关注)80pts,求优化
  • 板块灌水区
  • 楼主Literally
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/7 10:37
  • 上次更新2023/11/3 05:28:07
查看原帖
(悬赏3关注)80pts,求优化
638141
Literally楼主2023/8/7 10:37

用双指针做的

提交记录

包含a-z的最短子串

题目描述

给定小写字母组成的字符串 ss ,请你找出包含所有小写字母(任意顺序)的最短子串长度

输入格式

第一行包含1个小写字母组成的字符串 ss

输出格式

输出一个正整数,代表包含 a-z(就是26个字母都出现过)的最短子串长度,如果无解输出 −1-1

样例 #1

样例输入 #1

xcprvkpcyiludxoazfwlcnfmrqvzgjbimlhqzekoaaunctetsa

样例输出 #1

43

提示

  • 对于40%的数据,∣s∣≤500|s|\le 500

  • 对于100%的数据,1≤∣s∣≤1051\le |s|\le 10^5

#include <bits/stdc++.h>
using namespace std;
string k;
int tong[27];
int have=0;
int ans=999999999;
int main(){
	cin>>k;
	for(int l=0;l<k.length();l++){
		for(int i=1;i<=26;i++) tong[i]=0;
		have=0; 
		for(int r=l;r<k.length();r++){
			tong[k[r]-'a'+1]++;
			if(tong[k[r]-'a'+1]==1) have++;
			if(have==26){
				ans=min(ans,r-l+1);
				break;
			} 
		}
	}
	if(ans==999999999){
		cout<<-1;
		return 0;
	}
	cout<<ans;
	return 0;
}
2023/8/7 10:37
加载中...