【LeetCode 面试经典150题】14. Longest Common Prefix 最长公共前缀

14. Longest Common Prefix

题目大意

Write a function to find the longest common prefix string amongst an array of strings.

If there is no common prefix, return an empty string “”.

中文释义

编写一个函数,在字符串数组中找到最长的公共前缀字符串。

如果没有公共前缀,则返回一个空字符串 “”。

Example

Example 1:

Input: strs = [“flower”,“flow”,“flight”]
Output: “fl”

Example 2:

Input: strs = [“dog”,“racecar”,“car”]
Output: “”
Explanation: There is no common prefix among the input strings.

Constraints

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] consists of only lowercase English letters.

解题思路

要找到字符串数组中的最长公共前缀,可以采用以下步骤:

  1. 首先,检查输入的字符串数组 strs 是否为空,如果为空则直接返回空字符串 ""

  2. 对字符串数组 strs 进行排序,以确保相同前缀的字符串排在一起。排序后的数组中,第一个字符串 strs[0] 将成为可能的公共前缀。

  3. 初始化一个字符串 prefix,将其设置为 strs[0],作为初始可能的公共前缀。

  4. 从数组的第二个字符串开始遍历,即从 strs[1]strs[n-1],其中 n 是数组的大小。

  5. 在每次遍历中,使用 while 循环检查当前字符串 strs[i] 是否以 prefix 作为前缀,通过 strs[i].find(prefix) 的结果来判断。如果不是前缀,则将 prefix 截断一个字符,即 prefix = prefix.substr(0, prefix.length() - 1),然后继续检查。循环会一直执行,直到找到 strs[i] 的前缀或 prefix 变为空字符串。

  6. 重复步骤4和步骤5,直到遍历完整个数组。

  7. 返回 prefix 作为最长的公共前缀。

这个算法通过排序和逐步截断前缀的方式,找到字符串数组中的最长公共前缀。

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (strs.empty()) return "";
        sort(strs.begin(), strs.end());
        string prefix = strs[0];
        for (int i = 1; i < strs.size(); i++) {
            while (strs[i].find(prefix) != 0) {
                prefix = prefix.substr(0, prefix.length() - 1);
                if (prefix.empty()) return "";
            }
        }
        return prefix;
    }
};

你可能感兴趣的:(LeetCode,面试经典150题,leetcode,面试,linux)