leecode Day39 剑指专项19-22

80 阅读1分钟

面试题 17.11. 单词距离

var findClosest = function(words, word1, word2) {
    let idx1=-1,idx2=-1
    let res=words.length
    for(let i=0;i<words.length;i++){
        if(words[i]===word1){
            idx1=i
        }
        if(words[i]===word2){
            idx2=i
        }
        if(idx1>=0 && idx2>=0){
            res=Math.min(res,Math.abs(idx1-idx2))
        }
    }
    return res
};

剑指 Offer II 019. 最多删除一个字符得到回文

var validPalindrome = function(s) {
    let l=0,r=s.length-1
    while(l<=r){
        if(s[l]!==s[r]){
            if(isValidPalindrome(s.slice(l+1,r+1)) || isValidPalindrome(s.slice(l,r))){
                return true
            }
            return false
        }else{
            l++
            r--
        }
    }
    return true
};

const isValidPalindrome=(str)=>{
    let i=0,j=str.length-1
    while(i<=j){
        if(str[i]!==str[j]){
            return false
        }
        i++
        j--
    }
    return true
}
var countSubstrings = function(s) {
    let res=0
    for(let i=0;i<s.length*2-1;i++){
        let l=i/2,r=i/2+i%2
        while(l>=0 && r<s.length && s.charAt(l)===s.charAt(r)){
            l--
            r++
            res++
        }
    }
    return res
};

剑指 Offer II 021. 删除链表的倒数第 n 个结点

var removeNthFromEnd = function(head, n) {
    let dummyNode=new ListNode(0)
    dummyNode.next=head
    let f=dummyNode,s=dummyNode
    for(let i=0;i<n;i++){
        f=f.next
    }
    while(f.next){
        s=s.next
        f=f.next
    }
    s.next=s.next.next
    return dummyNode.next
};

剑指 Offer II 022. 链表中环的入口节点

var detectCycle = function(head) {
    let set=new Set()
    while(head){
        if(set.has(head)){
            return head
        }else{
            set.add(head)
            head=head.next
        }
    }
    return null
};