编写一个函数来查找字符串数组中的最长公共前缀。
若是不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
全部输入只包含小写字母 a-z 。数组
思路有两种:函数
第一种:纵向扫描:
1.第一个字符串与余下的全部字符串逐个比较。首先,找出第一个字符串与第二个字符串的最长公共前缀;而后让这个公共前缀和第三个字符串比较找出它们的公共前缀,依次直至遍历完全部的字符串。
2.第一个字符串与第二个字符串从头开始比较直到遇到不相同的字符为止,并记录最后一个相同的字符的索引right,而后第一个字符串与第三个字符串从头开始遍历时,若是遍历至索引right处还没遇到不一样的字符,则中止遍历,从0到right的字符串即为这三个字符串的最长公共前缀,若是没有遍历至索引right处,就有不一样的字符,则更新right的值,直至遍历完全部的字符串。
第二种:横向扫描:
1.同时遍历全部的字符串的第i个字符是否与第一个字符串的第i个字符是否相同,若是出现不相同,那么最长公共前缀即到上一个字符为止。code
纵向扫描:索引
string longestCommonPrefix(vector<string>& strs) { if(strs.size() <= 0) { return ""; } int right = strs[0].length(); for(int i = 1;i < strs.size();i++) { for(int j = 0; j < right ; j++) { if(strs[0][j] != strs[i][j]) { right = j; break; } } } return strs[0].substr(0,right); }
横向扫描:字符串
string longestCommonPrefix(vector<string>& strs) { if(strs.size() <= 0) { return ""; } int right = strs[0].length(); for(int i = 0 ; i < right; i++) { for(int j = 1 ; j < strs.size(); j++) { if(strs[j][i] != strs[0][i]) { right = i; break; } } } return strs[0].substr(0,right); }
正常思路通常都会是先找出两个字符串的最长公共前缀,在用这个公共前缀和余下的字符串逐一寻找共同的前缀。
横向的思惟是在网上看的,须要常常练习。拓宽思路,加油。string