Java&LeetCode 初入门——014. 最长公共前缀

Java&LeetCode 初入门——014. 最长公共前缀

  • 题目
  • 个人解法
  • 官方解法

文内代码全部采用JAVA语言。

题目

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
所有输入只包含小写字母 a-z 。

测试用例

示例 1:
输入: ["flower","flow","flight"]
输出: "fl"

示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

个人解法

首先默认公共前缀pre为空字符串“”,按顺序取第一个字符串内的第i个字符c,判断c是不是与其余字符串的第i个字符相同,如果全部相同,则给将c连接到pre上,如果出现不一致,直接跳出最外层循环,说明该字符不能成为公共前缀。
特别注意,当strs=[“aa”,“a”]时,这时会需要判断第二个字符串的第二个字符,但由于字符串长度问题,还是报错,所以要加限制条件,来判断是否存在这样的字符。
按照以上思路,运行时出现了特殊测试用例:[]。空字符串集合无法进入循环,因为读不到strs[0],所以在外层嵌套if语句。
执行用时: 11 ms, 在Longest Common Prefix的Java提交中击败了60.19% 的用户

class Solution {
    	public String longestCommonPrefix(String[] strs) {
		String pre="";//初始化公共前缀
		if (strs.length>0) {
		//如果字符串集合非空
			bgm:for (int i = 0; i < strs[0].length(); i++) {
			//外层循环命名bgm,方便一次性跳出循环
				char c=strs[0].charAt(i);//依次取第一个字符串的第i个字符元素
				for (int j = 1; j < strs.length; j++) {
				//对字符串数组中的第2~end个字符进行判断
					if (i>strs[j].length()-1||strs[j].charAt(i)!=c) {
					//如果要查找的元素位置 超过第j个字符串的最后一个位置,
					//或者,该位置上的字符不一致,直接跳出最外层循环,停止查找公共前缀。
						break bgm;	
					}
				}
				pre=pre+c;//对所有2~end个字符进行判断后都满足,那么认证c是公共前缀中的字符
			}
		}

		return pre;
		}
}

官方解法

截止做题时间,leetcode中文网站尚未给出官方解法

你可能感兴趣的:(java学习,java,leedcode,最长公共前缀)