题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]输出: "fl"
示例 2:
输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。
解法:
直觉解法:
基本就是遍历对照。
- 最长公共前缀的长度不会大于最短字符串的长度,所以先选出一个最短字符串,缩小问题规模。(但是其实没必要)
- 遍历对应位置,如果所有字符串对应位置匹配则记录该位。
- 最后输出n位相同字符。
public class Solution { public string LongestCommonPrefix(string[] strs) { if(strs.Length == 0) return ""; if(strs.Length == 1) return strs[0]; // 选出一个最短的字符长度 int len = strs[0].Length; for(int i = 0;i
:
最长公共子串(Java):
public String longestCommonPrefix(String[] strs) { if (strs.length == 0) return ""; String prefix = strs[0]; for (int i = 1; i < strs.length; i++) while (strs[i].indexOf(prefix) != 0) { prefix = prefix.substring(0, prefix.length() - 1); if (prefix.isEmpty()) return ""; } return prefix;}
水平扫描:
比较对应列上的字符是否相同。
分治:
这个算法的思路来自于LCP操作的结合律。将原问题分成两个子问题,用子问题的解来比较构成原问题的解。