LeeCode-刷题日记-Day22

43. 字符串相乘

思路:用数组存储每个数字对应相乘的结果,将其存储到对应位置。之后再处理进位的问题。

/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var multiply = function(num1, num2) {
    if(num1==="0"||num2==="0") return "0";
    str1=num1.split('').reverse();
    str2=num2.split('').reverse();
    let result=[];
    for(let i=0;i<str1.length;i++){
        for(let j=0;j<str2.length;j++){
            result[i+j]=result[i+j]||0;
            result[i+j]+=parseInt(str1[i])*parseInt(str2[j]);
        }
    }
    let temp;
    for(let k=0;k<result.length;k++){
        if(result[k]>9){
            temp=Math.floor(result[k]/10);
            result[k]=result[k]%10;
            result[k+1]=result[k+1]||0;
            result[k+1]+=temp;
        }
    }
    return result.reverse().join('');
};

187. 重复的DNA序列

思路:使用哈希表的思想,将字符串逐字符拆分,固定长度10,将其插入哈希表中。重复出现次数加一,若次数大于二则加入答案中。

/**
 * @param {string} s
 * @return {string[]}
 */
var findRepeatedDnaSequences = function(s) {
    let L =10;
    let ans = [];
    let cnt = new Map();
    let n=s.length;
    for(let i=0;i<=n-L;++i){
        let sub = s.slice(i,i+L);
        cnt.set(sub,(cnt.get(sub)||0)+1);
        if(cnt.get(sub)===2){
            ans.push(sub);
        }
    }
    return ans;
};