思路:就是把两个字符串提取出来,然后找公共后缀的第一个字符的地址
但是要注意后缀的含义!!!
不同的地址可能对应相同的字符,因此在从后往前比较字符相同的时候不仅仅是字符相同,该字符对应的地址也要相同,才算是后缀。
#include<bits/stdc++.h>
using namespace std;
struct node{
int id;
char data;
int next;
}q[100005];
vector<int> v1,v2;
int main()
{
int s1,s2,n;
int a,b;
char ch;
cin>>s1>>s2>>n;
for(int i=1;i<=n;i++)
{
cin>>a>>ch>>b;
q[a].id=a;
q[a].data=ch;
q[a].next=b;
}
string t1="",t2="";
int d=s1;
while(d!=-1)
{
t1+=q[d].data;
v1.push_back(q[d].id);
d=q[d].next;
}
d=s2;
while(d!=-1)
{
t2+=q[d].data;
v2.push_back(q[d].id);
d=q[d].next;
}
int w=t1.length()-1;
int k=t2.length()-1;
int flag=0;
while(t1[w]==t2[k] && w>=0 && k>=0 && v1[w]==v2[k]) //此处字符要相同,字符对应地址也要相同
{
flag=1;
w--;
k--;
}
w++;
k++;
if(flag==0)
{
cout<<"-1"<<endl;
}
else
printf("%05d\n",v1[w]);
}