起因:見到一個題目,發現竟然用字符串比較的方式確定相同得公共前綴
//題目 編寫一個函數來查找字符串數組中的最長公共前綴
//輸入: ["flower","flow","flight"]
//輸出: "fl"
var longestCommonPrefix = function(strs) {
if (strs === null || strs.length === 0) return "";
if(strs.length === 1) return strs[0]
let min = 0, max = 0
for(let i = 1; i < strs.length; i++) {
//解題思路: 獲取數組中的最大值及最小值字符串,最小字符串與最大字符串的最長公共前綴也爲其他字符串的公共前綴,即爲字符串數組的最長公共前綴
//例如 abc 、 abcd 、ab 、ac ,最小 ab 與最大 ac 的最長公共前綴一定也是 abc 、 abcd 的公共前綴
if(strs[min] > strs[i]) min = i
if(strs[max] < strs[i]) max = i
}
for(let j = 0; j < strs[min].length; j++) {
if(strs[min].charAt(j) !== strs[max].charAt(j)) {
return strs[min].substring(0, j)
}
}
return strs[min]
};
首先要明確,js中不同類型間是可以比較的,並且會針對不同類型作隱式轉換
直接上總結:
- 比較對象中存在對象時,都會調用對象的toString()方法,轉換成字符串進行比較;
- 比較對象中存在數字時,都會給不是數字的先調用Number()方法,轉換成數字再進行比較;
- 字符串之間進行比較則是比較他們的第一個不同的ascii碼
接下來看例子
- 對象與字符串
let obj = {z:1}
obj.toString = function(){
console.log('toString被調用了')
return Object.prototype.toString.call(this)
}
console.log(obj < 'obj')
// toString被調用了
// true
-
如果將字符串與數字進行比較,那麼在做比較時 JavaScript 會把字符串轉換爲數值。空字符串將被轉換爲 0。非數值字符串將被轉換爲始終爲 false 的 NaN。
-
題目中遇到的採用第三種 ascii碼,區分大小寫,大寫字母A在65,小寫字母a在97