dp[i]表示以a[i]结尾需要删除的数量
#include <iostream>
#include <bits/stdc++.h>
const int maxn = 1000001;
using namespace std;
vector<int>jilu[10];
long long a[maxn],dp[maxn];
long long N;
int main()
{
cin >> N;
for (int i = 1; i <= N; ++i) {
dp[i] = LLONG_MAX;
cin >> a[i];
jilu[a[i] % 10].push_back(0);
}
long long ans=N;
dp[0] = 0;
for (int i = 1; i <= N; ++i) {
int temp = a[i];
while (temp >= 10) { temp /= 10; }
for (auto& j : jilu[temp]) {
dp[i] = min(dp[i], dp[j] + (i-j) - 1);
}
ans = min(N - i + dp[i], ans);
jilu[a[i] % 10].push_back(i);
}
cout << ans;
}