题目大意:求给定内存地址的两个字符串公共后缀的起始点(内存地址)。
解题思路:将串1的所有点存到 set 中,逐个判断串2的点是否在set中,如果在,则找到停止;否则不存在 ,输出 -1。
题目链接:https://www.patest.cn/contests/pat-a-practise/1032
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
typedef struct Info{
char data;
int next;
}Info;
Info info[100005];
set<int> SS;
int main(int argc, char** argv) {
int as1,as2,num;
cin >> as1 >> as2 >> num;
for(int i=0;i<num;++i)
{
int n;
scanf("%d ",&n);
scanf("%c%d",&info[n].data,&info[n].next);
}
int ss = as1;
while(ss != -1)
{
SS.insert(ss);
ss = info[ss].next;
}
ss = as2;
int cnt = 0;
while(ss != -1)
{
if(SS.count(ss) == 1)
{
++cnt;
break;
}
ss = info[ss].next;
}
if(cnt == 0)
printf("-1\n");
else
{
printf("%05d\n",ss);
}
return 0;
}