题意:给定一个小写字母组成的序列,求问其中相同字母之前的最小距离,若不存在相同字母则输出-1。
思路:每次遍历,若找到相同的则更新最短距离,然后break。时间优化在于每次更新完最短距离,下次遍历就可以在最短距离之内遍历。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
int n;
cin>>n;
getchar();
for(int i=1;i<=n;i++){
string s;
getline(cin,s);
int mindis=9999;
int dis=0;
for(int j=0;j<s.length();j++){
for(int k=j+1;k<=j+mindis&&k<s.length();k++){
if(s[j]==s[k]){
if(k-j<mindis)
mindis=k-j;
break;
}
}
}
if(mindis==9999)
mindis=-1;
printf("Case #%d: %d\n",i,mindis);
}
return 0;
}