首页 > 解决方案 > 匹配数组模式算法

问题描述

给定 2 个数组a = [b,b,c]数组 e = [o,o,p],它们相互匹配,但它们不匹配数组,如[x,y,y][a,b,c ] . 作为工作测试的一部分,我被要求用 Java 编写一个(可能是递归的)算法。

标签: javaarrays

解决方案


您可以查看这段代码:-

import java.util.HashMap;
import java.util.Map;

public class MatchPatterns {

    public static void main(String ani[]) {
        char[] a= {'b','b','c'};
        char[] b= {'o','o','p'};
        
        System.out.println(doTheyMatch(a, b));
    }

    private static boolean doTheyMatch(char[] a, char[] b) {
        if(a.length != b.length) {
            return false;
        }
        
        int aInteger[] = new int[a.length];
        Map<Character, Integer> map = new HashMap<>();
        
        int charRepresentator = 0;
        for(int i =0 ;i <a.length; i++) {
            if(map.containsKey(a[i])){
                aInteger[i] = map.get(a[i]).intValue();
            }else {
                map.put(a[i], charRepresentator);
                aInteger[i] =  charRepresentator;
                charRepresentator++;
            }
            
        }
        
        
        int bInteger[] = new int[b.length];
        map = new HashMap<>();
        
        charRepresentator = 0;
        for(int i =0 ;i <b.length; i++) {
            if(map.containsKey(b[i])){
                bInteger[i] = map.get(b[i]).intValue();
            }else {
                map.put(b[i], charRepresentator);
                bInteger[i] =  charRepresentator;
                charRepresentator++;
            }
            
        }
        
        for(int i =0 ;i < aInteger.length; i++) {
            if(aInteger[i] != bInteger[i]) {
                return false;
            }
        }
        
        return true;
    }
}

推荐阅读