本文共 1576 字,大约阅读时间需要 5 分钟。
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl" 示例 2:输入:strs = ["dog","racecar","car"]
输出:"" 解释:输入不存在公共前缀。解决问题的思路有两种,第一个是纵向比对,一个是横向比对。
方法一:纵向比对
以第一个单次为基准,每次取第一个单词的元素,与其他单词的相同位进行比较
方法二:横向比对
每次进行两两比对,记录当前最长的公共前缀。之后依次比对当前最长公共前缀与下一个单词。如果当前最长公共前缀为0,则break,表明当前已经无最长公共前缀。
Java解决问题代码:
class Solution { public String longestCommonPrefix(String[] strs) { if(strs == null || strs.length == 0) { return ""; } /*纵向,以第一个单词为基准,依次判断以后单词的同一位 int len = strs[0].length(); int count = strs.length; for(int i = 0; i < len; i++) { char tmp = strs[0].charAt(i);//每次分别比对第一个单词的每一位 for(int j = 1; j < count; j++) { if((i == strs[j].length()) || (strs[j].charAt(i) != tmp)) {//若以后单词长度短于第一个单词长度或者相同位单词不同 return strs[0].substring(0, i); } } } return strs[0]; */ /*横向 int len = strs.length; String ans = strs[0]; for(int i = 1; i < len; i++) { ans = findLongestCommonPrefix(ans, strs[i]); if(ans.length() == 0) {//前缀为0,表示此时没有公共前缀 break; } } return ans; } public String findLongestCommonPrefix(String str1, String str2) {//依次两两比对单词的公共前缀 int length = Math.min(str1.length(), str2.length()); int index = 0;//index表示相同单词位的下标 while(index < length && str1.charAt(index) == str2.charAt(index)) { index++; } return str1.substring(0, index); } */ }}
转载地址:http://gzgzi.baihongyu.com/