最长公共前缀
题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串""。
解答
我的分析
一句话总结题目
字符串数组的最长公共前缀
| 输入 | 输出 |
|---|---|
| ['flow','fliw','flloq'] | 'fl' |
自己的解法思路
1,循环查找数组每一个值
2,每个值与后面的值一一对比
3,找到第一个不是的,前面的几个则为最长公共前缀
(实践时纠结怎么两两比较不会出现比较错误的情况)
我的答案
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
// 1,循环查找数组每一个值
// 2,每个值与后面的值一一对比
// 3,找到第一个不是的,前面的几个则为最长公共前缀
for(let i=0;i<strs.length;i++){
let new_str = strs[i];
let ans = '';
for(let j=0;j<new_str.length;i++){
if(strs[i][j]==strs[i+1][j]){
//没想懂这里怎么无限对比下一个值?
}
}
}
};
标准答案
/**
* @param {string[]} strs
* @return {string}
* 运用链表的思想
*/
var loogestCommonPrefix = function(strs){
//当字符串数组长度为0时,公共前缀也为空,返回""
if(strs.length == 0) return '';
//初始化,将第一个字符串作为最长前缀
let ans = strs[0];
//遍历字符串,依次与ans进行比较,两两找到公共前缀,最后的结果是最长公共前缀。
for(let i;i<strs.length;i++){
let j = 0 ;
for(;j<ans.length&&j<strs[i].length;j++){
if(ans[j]!=strs[i][j]) break;
}
ans = ans.substr(0,j)
//如果查询中,发现ans为空,则公共前缀不存在,直接返回“”
if(ans === ''){
return ans;
}
}
return ans;
}
答案分析
先分析特殊情况:当字符串长度为0时,公共前缀也就为空。
重点思路:
1,排除特殊条件
2,两两对比找到公共前缀,找到不符合条件的某一个字符j,返回公共前缀截止于j前的所有字符作为最大公共前缀
结论
自我总结
1,substr?
抽取指定数目的字符
使用:str.substr(start,end) => ans
| 字符 | 含义 |
|---|---|
| str | 被抽取的字符 |
| start | 开始下标 |
| start | 结束下标 |
| ans | 返回结果(抽取后的字符) |
2,链表?
链表是一种数据结构,用于储存和操作一系列的元素。
它由一系列的节点(Node)组成,每个节点又包含了两个部分:数据域(存储数据)和指针域(指向下一个节点)。通过这种方式,链表中的节点可以按顺序链接在一起,形成一个链式结构。
添加或移除元素的时候不需要移动其他元素,这是链表最大的好处
引申思考
当出现多层嵌套的数据,先确定一个值后,两两比较。
题目来源:力扣(LeetCode)
其他来源:CSDN