1.题目
2.参考代码
#include<bits/stdc++.h>
using namespace std;
int dp[10];//dp[i]表示以i为数字最后一位的接龙数列长度
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin>>n;
string s;
int m=0;
for(int i=0;i<n;++i){
cin>>s;
int x=s[0],y=s[s.size()-1];//x表示数的第一位,y为数的最后一位
dp[y]=max(dp[x]+1,dp[y]);
m=max(m,dp[y]);
}
cout<<n-m<<endl;
return 0;
}
3.代码分析
1.先定义一个大小为10的整型数组dp,用来存储接龙数列长度。
2.输入n,表示接下来有n个字符串。
3.使用for循环输入n个字符串。
4.提取字符串s的第一个字符x和最后一个字符y。
5.更新以字符y结尾的接龙数列的长度,如果以字符x结尾的接龙数列长度加1后更长,则更新为该长度,否则保持原来的长度。
6.更新最大的接龙数列长度。
7.输出不在接龙数列中的字符串的数量,即总字符串数n减去最长接龙数列的长度m。
主要思路是通过动态规划的思想,维护一个数组 dp
来记录以每个数字结尾的接龙数列的长度,然后通过比较更新来确定最长的接龙数列长度,并输出不在接龙数列中的字符串数量。