题意分析:
(1)找出两个单词公共后缀的起始地址,单词以字符链表的形式存储起来,因为地址是5位整数,并且地址上的前驱后继关系唯一,因此开辟一个数组,其下标用来表示地址。因为题目给出的字母顺序是乱的,最好先用map存储链接关系。这样遍历效率会更高。遍历地址,并置数组相应的位置为1,当便利第二个单词的时候,当访问到此地址已经标记为1,则为公共后缀的开始位置。
可能坑点:
#include <iostream>
#include <stdio.h>
#include <map>
using namespace std;
int address[100000]={0};
map<int,int>mp;
int main()
{
int word1,word2,N;
scanf("%d %d %d",&word1,&word2,&N);
int start,end;
char key;
int i=0;
while(i<N)
{
scanf("%d %c %d",&start,&key,&end);
mp[start]=end;
i++;
}
while(word1!=-1)
{
address[word1]=1;
word1=mp[word1];
}
while(word2!=-1)
{
if(address[word2]==1)
{
printf("%05d\n",word2);
return 0;
}
word2=mp[word2];
}
cout<<-1<<endl;
return 0;
}