Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as JavaScript by Ira ( 5 years ago )
/**
 * @param {string[]} words
 * @return {number[][]}
 */
var palindromePairs = function(words) {
    let mod = BigInt(1);
    
    for (let i = 0; i < 64; i++) {
        mod *= BigInt(2);
    }
    mod = BigInt(1000000009);
    mod *= BigInt(1000000007);
    
    const b = BigInt(37);
    let powers = new Array(301);
    powers[0] = BigInt(1);
    for (let i = 1; i < powers.length; i++) {
        powers[i] = powers[i - 1] * b % mod;
    }  
    
    var hash = (str) => {
        let res = BigInt(0);
        for (let i = 0; i < str.length; i++) {
            res = res * b  + BigInt(str.charCodeAt(i) - 96);
            res %= mod;
        }
        return res;
    };
    
    let hf = new Array(words.length);
    let hb = new Array(words.length);
    
    for (let i = 0; i < words.length; i ++) {
        hf[i] = hash(words[i]);
        hb[i] = hash(words[i].split('').reverse().join(''));
    }
    
    let sum = (h1, h2, l) => {
        return (h2 + powers[l] * h1); // % mod;
    };

    let res = [];
    for (let i = 0; i < hf.length; i++) {
        for (let j = 0; j < hb.length; j++) {
            if (i != j) {
                let sumOfForwardHash = sum(hf[i], hf[j], words[j].length);
                let sumOfBackwardHash = sum(hb[j], hb[i], words[i].length);
                
                if (sumOfForwardHash === sumOfBackwardHash) {
                    res.push([i,j]);
                }
            }
        }
    }
    return res;
    
};

 

Revise this Paste

Your Name: Code Language: