题解 | #最长公共前缀#

最长公共前缀

http://www.nowcoder.com/practice/28eb3175488f4434a4a6207f6f484f47

public class Solution {

public static final String EMPTY = "";

/**
 * @param strs string字符串一维数组
 * @return string字符串
 */
public String longestCommonPrefix(String[] strs) {
    // 参数检测
    if (strs == null || strs.length == 0) {
        return EMPTY;
    }
    if (strs.length == 1) {
        return strs[0];
    }
    int length = strs.length;
    // 开始遍历公共前缀
    String coprefix = strs[0];
    for (int i = 0; i < length - 1; i++) {
        // 从头开始查找公共前缀
        coprefix = findTwoWordsCommonPrefix(coprefix, strs[i + 1]);
        if (isEmpty(coprefix)) {
            // 没有公共前缀则返回空串
            break;
        }
    }
    return coprefix;
}

/**
 * 判断是否是空字符串
 *
 * @param str 字符串
 * @return boolean 是否是空字符串
 */
public boolean isEmpty(String str) {
    return str == null || str.length() == 0;
}

/**
 * 查找两个单词的公共前缀
 *
 * @param str1 第一个字符串
 * @param str2 第二个字符串
 * @return string字符串 公共前缀
 */
public String findTwoWordsCommonPrefix(String str1, String str2) {
    if (isEmpty(str1) || isEmpty(str2)) {
        return EMPTY;
    }
    // 查找公共前缀
    int minLen = str1.length() >= str2.length() ? str2.length() : str1.length();
    // 遍历查找公共字符串
    String coprefix = EMPTY;
    for (int i = 0; i < minLen; i++) {
        // 遍历查找公共前缀,每次往前查找一位
        String prefix1 = str1.substring(0, i + 1);
        if (str2.startsWith(prefix1)) {
            // 是共同前缀则继续往前查找
            // 缓存公共前缀
            coprefix = prefix1;
            continue;
        } else {
            // 是不共同前缀的话终止查找
            break;
        }
    }
    return coprefix;
}

}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务