4. 最长公共前缀
- 题目
- 题目分析
题目
题目分析
首先要对字符串数组进行分析,字符串数组元素的最长公共前缀肯定不会超过最小元素长度,并如存在公共前缀则需遍历整个字符串元素,有点像二维数组,最后加上截取字符串加上判空操作就完成啦!
string longestCommonPrefix(vector<string>& strs) {
//string longestCommonPrefix(vector<string>& strs): 这个函数接受一个字符串向量 strs 作为参数,并返回一个字符串作为最长公共前缀。
if (strs.empty()) {
//首先检查输入的字符串向量是否为空,如果为空则直接返回空字符串作为最长公共前缀。
return "";
}
//使用两个循环嵌套来遍历字符串数组中的每个字符。外部循环控制比较的列数(即每个字符串的当前位置),内部循环用于比较每个字符串当前位置的字符。
//外部循环从第一个字符串的第一个字符开始比较。
//内部循环从第二个字符串开始逐个比较每个字符串的当前位置的字符。
//在内部循环中,检查当前位置字符是否与第一个字符串的对应字符相同,如果不同或者某个字符串已经遍历到末尾,则返回已匹配的最长公共前缀。
//如果遍历完成,说明所有字符串的前缀都相同,返回第一个字符串作为最长公共前缀。
for (int i = 0; i < strs[0].length(); ++i) {
for (int j = 1; j < strs.size(); ++j) {
if (i >= strs[j].length() || strs[j][i] != strs[0][i]) {
return strs[0].substr(0, i);
//如果发现不匹配的字符或者某个字符串已经遍历到末尾,则返回截取的最长公共前缀。
}
}
}
return strs[0];
//如果未发现不匹配的字符,循环结束时返回第一个字符串,因为此时第一个字符串就是整个字符串数组的最长公共前缀
}