var findClosest = function(words, word1, word2) {
let idx1=-1,idx2=-1
let res=words.length
for(let i=0
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
}
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
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
}
var removeNthFromEnd = function(head, n) {
let dummyNode=new ListNode(0)
dummyNode.next=head
let f=dummyNode,s=dummyNode
for(let i=0
f=f.next
}
while(f.next){
s=s.next
f=f.next
}
s.next=s.next.next
return dummyNode.next
}
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
};