比较两个长度不同的串是否有相同的后缀有两种思路:一是从最后往前比,二是把较长的那个截断后再从前往后比较。
本题如果采用int存储地址,需要在输出地址的时候格式化(%05d)
代码如下:
#include<cstdio>
#include<vector>
using namespace std;
#define N 100001
struct node{
int address;
char data;
int next;
};
node nodes[N];
int main(){
//freopen("1.txt","r",stdin);
int start1,start2,n,i,j;
scanf("%d %d %d",&start1,&start2,&n);
int address,next;
char data;
for(i=0;i<n;i++){
scanf("%d %c %d",&address,&data,&next);
nodes[address].data= data;
nodes[address].next = next;
}
vector<int> list1,list2;
int start;
start = start1;
while(start!=-1){
list1.push_back(start);
start = nodes[start].next;
}
start=start2;
while(start!=-1){
list2.push_back(start);
start = nodes[start].next;
}
int res=-1;
for(i=list1.size()-1,j=list2.size()-1;i>=0&&j>=0;i--,j--){
if(list1[i]!=list2[j])
break;
res = list1[i];
}
if(res==-1)
printf("-1");
else
printf("%05d",res);
}