求英语单词第一个交集

1、问题介绍

给定两个英语单词,要找两个英语单词之间,第一个英语字母交集的地址,如果存在交集,则输出交集的地址,如果不存在交集,则输出-1。

2、输入样例

输入:
00001 00002 4
00001 a 10001
10001 s -1
00002 a 10002
10002 t -1

输出:
-1
输入:
11111 22222 9
67890 i 00002
00010 a 12345
00003 g -1
12345 D 67890
00002 n 00003
22222 B 23456
11111 L 00001
23456 e 67890
00001 o 00010

输出:
67890

3、思路

主要思路为,遍历第一个单词,让每个字母的flag赋值为true,再遍历第二个单词,当遇到某个字母的flag为true时,就代表找到了。这比把两个单词都打印出来,然后再使用二重循环对比快多了。

4、代码实现

#include<iostream>
using namespace std;

#define MaxSize 100010
struct Node{
    
    
    char data;
    int next;
    bool flag;
}node[MaxSize];


int main(){
    
    
    bool flag = false;
    int result;
    int s1,s2,n;
    cin >> s1 >> s2 >> n;
    while(n--){
    
    
        int address,next;
        char data;
        cin >> address >> data >> next;
        node[address].data = data;
        node[address].next = next;
        node[address].flag = false;
    }

    //遍历链表一
    while(node[s1].next != -1){
    
    
        node[s1].flag = true;
        s1 = node[s1].next;
    }

    //遍历链表二
    while(node[s2].next != -1){
    
    
        if(node[s2].flag){
    
    
            result = s2;
            flag = true;
            break;
        }
        s2 = node[s2].next;

    }

    if(flag){
    
    
        //找到了
        cout << result;
    }else{
    
    
        cout << -1;
    }
    
    return 0;
}

Guess you like

Origin blog.csdn.net/xdg15294969271/article/details/120471048