赞
踩
目录
难度 简单
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成- class Solution {
- public:
- string longestCommonPrefix(vector<string>& strs) {
-
- }
- };
解法1(两两比较): 可以先找出前两个的最长公共前缀,然后拿这个最长公共前缀依次与后面的字符串比较,这样就可以找出所有字符串的最长公共前缀。
- class Solution {
- public:
- string longestCommonPrefix(vector<string>& strs) {
- string ret = strs[0];
- for(int i = 1; i < strs.size(); ++i)
- {
- ret = TowlongestCommonPrefix(ret, strs[i]);
- }
- return ret;
- }
-
- string TowlongestCommonPrefix(string& str1, string& str2)
- {
- if(str1.size() > str2.size())
- swap(str1, str2);
-
- for(int i = 0; i < str1.size(); ++i)
- {
- if(str1[i] == str2[i])
- continue;
- else
- return str1.substr(0, i);
- }
- return str1;
- }
- };
解法2(统一比较):题目要求多个字符串的公共前缀,我们可以逐位比较这些字符串,哪一位出现了不同,就在哪一位截止。
- class Solution {
- public:
- string longestCommonPrefix(vector<string>& strs) {
- string ret = "";
- sort(strs.begin(), strs.end());
- for(int i = 0; i < strs[0].size(); ++i) // 遍历最小的字符串
- {
- int j = 1; // 第二行开始依次和第一行比较
- while(j < strs.size() && strs[0][i] == strs[j][i])
- { // 注意j不要越界
- ++j;
- }
- if(j == strs.size())
- {
- ret += strs[0][i];
- }
- else
- {
- break;
- }
- }
- return ret;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。