题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
解题思路:
- 用一个变量保存第一个字符串。
- 拿后面的每个字符串与第一个字符串中的每个字符进行比较。
- 用变量length保存公共前缀的长度。
- 如果有任意一个字符不同,则终止循环。
- 截取第一个字符串中length长度的字符即为公共前缀。
代码如下:
//
// Created by HINTS on 2018/12/3.
//
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string longestCommonPrefix(vector<string> &str){
//判断是否为空
if(str.size() == 0){
return "";
}
//解法:
//拿后面的字符串与第一个字符串的每个字符进行比较
string firstStr(str[0]);
int length = 0; //记录公共前缀的长度
bool flag = true; //标志位
for (int i = 0; i < firstStr.size() && flag; ++i) {
for (int j = 1; j < str.size(); ++j) {
if(firstStr[i] == str[j][i]){
continue;
} else{
flag = false;
break;
}
}
if(flag){
length = i + 1;
}
}
return length == 0?"":firstStr.substr(0, length);
}
int main(){
vector<string> str = {"flower", "flow", "flight"};
string firstStr(str[0]);
cout << longestCommonPrefix(str) << endl;
//cout<<firstStr.substr(0,0)<<endl;
}