【PAT_1032 】share

题目描述:

 

找到word1和word2的公共后缀的起始位置

输入

第一行 地址一adress1(word1的起始地址),地址二(word2的起始地址),正整数(节点总数)。其中节点的地址是5位正整数,NULL由-1表示。
然后是N行,每行描述一个格式的节点:
Address Data Next
其中Address是节点的位置,Data是该节点包含的字母,它是从{a-z,A-Z}中选择的英文字母,Next是下一个节点的位置。

输出

输出公共后缀的起始位置。

解题思路

word1和word2的公共后缀的长度相同,所以从word1和word2长度相同的位置开始比较。先获得word1和word2的长度len1和len2,假设word1较word2长,先找到word1的第len2-len1个节点,是的word1余下长度与word2相同,然后逐一比较word1和word2的各节点的下一个地址是否相等,相同即返回。

代码

#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;

struct node {

	char val;
	int next;
	bool flag;
}nodes[100000];
int main() {
	int chain1, chain2, n;
	int adress, next;
	char val;
	cin >> chain1 >> chain2 >> n;
	for (int i = 0; i < n; i++) {
	
     scanf("%d %c %d", &adress, &val, &next);
		nodes[adress].val = val;
		nodes[adress].next = next;
		nodes[adress].flag =false;
	}
	bool flag = true;
	while(chain1!= -1){
	      nodes[chain1].flag =true;
        chain1 = nodes[chain1].next;
	}
	while(chain2!= -1){
	  if( nodes[chain2].flag ==true){
	    flag =false;
	    printf("%05d", chain2);
	    break;
	  }
      chain2 = nodes[chain2].next;
       
	}
   if(flag)
        cout<<"-1"<<endl;


	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值