一:最长公共前缀
方法一:
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strArr) {
const fistStr = strArr[0]
let len,targetStr = ''
if (strArr.length===1) return fistStr
for (let i = 0; i < fistStr.length; i++) {
len = 1
while (fistStr[i] === strArr[len][i]){
len++
if (len>=strArr.length){
targetStr+=fistStr[i]
break
}
}
if (fistStr[i]!==targetStr[i])break
}
return targetStr
};
二:最长回文串
知识点:
什么是回文串?
正读和反读都是一样的字符序列是“回文串”,也就是一个对称的字符串。比如:‘abba’和‘abcba’是回文串,‘abcde’不是回文串。
回文串的本质:(可能除去一个字母外)其他字母出现偶数次
所以此题的解法:是统计每一个字母出现的次数,如果字母出现偶数次,那一定是回文串的组成成分。如果字母出现的次数是奇数,那么字母减一还存在也是回文串的组成成分。当前面的数值去掉之后,还存在奇数的字符,那么可以再加一。
用js的对象模拟哈希值
代码一
/**
* @param {string} s
* @return {number}
*/
var longestPalindrome = function(s) {
let ans = 0
let odd = false
let strMap = {}
for(let i = 0; i< s.length; i++){
if(s[i] in strMap){
strMap[s[i]] += 1
}else{
strMap[s[i]] = 1
}
}
for(let key in strMap){
if(strMap[key]%2 === 0){
ans += strMap[key]
}else{
odd = true
ans += strMap[key] - 1
}
}
if(odd){
ans += 1
}
return ans
};