赞
踩
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
题目来自:
https://leetcode-cn.com
import java.io.BufferedReader; import java.io.InputStreamReader; public class test { public static void main(String[] args) { //java键盘输入字符串数组 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] str = null; try { str = br.readLine().split(","); } catch (Exception e) { e.printStackTrace(); } //调用方法一 System.out.println(new test().longestCommonPrefix(str)); //调用方法二 //System.out.println(new test().longestCommonPrefix2()); }
public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) { return ""; } //如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续遍历剩下的字符串,直接返回空串即可。 String prefix = strs[0]; for (int i = 1; i < strs.length; i++) { prefix = longestCommonPrefix(prefix, strs[i]); //调用重载的方法,首先执行str[0]和str[1],返回了新的字符串以后,再执行新的字符串和str[2],以此类推 if (prefix.length() == 0) { break; }//没有公共前缀直接跳出 } return prefix; } public String longestCommonPrefix(String str1, String str2) { //重载 int length = Math.min(str1.length(), str2.length());//挑选出两个字符串中最短的那一个 int index = 0;//索引从0开始 while (index < length && str1.charAt(index) == str2.charAt(index)) {//当str1中index索引下的字符与str2中index索引下的字符相同时,index++循环 index++; } return str1.substring(0, index);//返回str1字符串中 索引从0到index的字符,并组成新的字符串 }
public String longestCommonPrefix2(String[] strs) { if (strs == null || strs.length == 0) { return ""; }//如方法一 int length = strs[0].length();//i的最大长度 int count = strs.length;//j的最大长度 //进入循环,按照图中红箭头形式 for (int i = 0; i < length; i++) { char c = strs[0].charAt(i);//c的意思如图所示 for (int j = 1; j < count; j++) { if (i == strs[j].length() || strs[j].charAt(i) != c) { return strs[0].substring(0, i);//图中第三行和第四行为执行条件,对应上一行代码 } } } return strs[0]; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。