You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.6 KiB
85 lines
2.6 KiB
2 years ago
|
# 距离
|
||
|
|
||
|
### 题目描述
|
||
|
蒜头君最近获得了一个字符串 `str`,这个字符串只由**小写字母**构成。
|
||
|
|
||
|
蒜头君不仅是一个数学能手,英语学的更是不错,他对于 $26$ 个英文字母非常敏感。
|
||
|
|
||
|
蒜头君发现,相同字母(如果存在)在字符串中有一个距离,比如字符串 `abca`,字母 `a` 的距离为 $3$(索引之差的绝对值)。
|
||
|
|
||
|
距离的定义:字符串中相对位置相邻的两个相同字母之间的距离。如果位置 $i$ 的字母与位置 $j(i < j)$ 的字母之间存在距离,那么需要满足 `str[i] == str[j]` 且 $i+1 \sim j - 1$ 之间可以有其他字母但是不能有与 `str[i]` 相同的字母。
|
||
|
|
||
|
对于字符串 `abcasdva`,则有三个字母 `a`,第一个 $a$ 和第二个 `a` 之间的距离为 $3$,第二个 `a` 和第三个 `a` 之间的距离为 $4$。第一个 `a` 和第三个 `a` 之间**没有距离**。
|
||
|
|
||
|
现在蒜头君把他的字符串给你了,你能够找到字符串字母之间的**最大距离**吗?
|
||
|
|
||
|
如果字符串中,所有的字母都不相同,那么最大距离为 $0$。
|
||
|
|
||
|
### 输入格式
|
||
|
|
||
|
输入共两行。
|
||
|
|
||
|
第一行输入一个正整数 $n$,表示字符串的长度。
|
||
|
|
||
|
第二行输入一个长度为 $n$ 的字符串 $str$。
|
||
|
|
||
|
### 输出格式
|
||
|
|
||
|
输出共一行。
|
||
|
|
||
|
输出一个数,表示字符串字母之间的最大距离。
|
||
|
|
||
|
### 数据范围
|
||
|
|
||
|
对于 $10\%$ 的数据,有 $1\leq n\leq 10$,且字符串中的字母互不相同。
|
||
|
|
||
|
对于另外 $20\%$ 的数据,有 $1\leq n\leq 100$,且字符串中只有两种字母。
|
||
|
|
||
|
对于 $100\%$ 的数据,有 $1\leq n\leq 10^3$。
|
||
|
|
||
|
<div style="page-break-after: always"></div>
|
||
|
|
||
|
### 题解
|
||
|
依次枚举每一个字母,然后寻找**下一个**与它相同的字母,并且维护距离的最大值。
|
||
|
|
||
|
注意,如果找到下一个与该字母相同的字母,维护后就需要通过`break`结束当前寻找的循环。
|
||
|
|
||
|
```c++
|
||
|
int ans = 0;
|
||
|
for (int i = 0; i < n; i++) {
|
||
|
for (int j = i + 1; j < n; j++) {
|
||
|
if (str[i] == str[j]) {
|
||
|
ans = max(ans, j - i);
|
||
|
break; // 注意这个 break
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
#### 参考代码
|
||
|
|
||
|
```c++{.line-numbers}
|
||
|
#include <bits/stdc++.h>
|
||
|
using namespace std;
|
||
|
int main() {
|
||
|
int n;
|
||
|
string str;
|
||
|
cin >> n;
|
||
|
cin >> str;
|
||
|
int ans = 0;
|
||
|
for (int i = 0; i < n; i++) {
|
||
|
for (int j = i + 1; j < n; j++) {
|
||
|
if (str[i] == str[j]) {
|
||
|
ans = max(ans, j - i);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
cout << ans << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
<div style="page-break-after: always"></div>
|