最长公共前缀

题目

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

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]

输出: "fl"

示例 2:

输入: ["dog","racecar","car"]

输出: ""

解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

思路

思路有两种:

第一种:纵向扫描:

        1.第一个字符串与余下的所有字符串逐个比较。首先,找出第一个字符串与第二个字符串的最长公共前缀;然后让这个公共前缀和第三个字符串比较找出它们的公共前缀,依次直至遍历完所有的字符串。

        2.第一个字符串与第二个字符串从头开始比较直到遇到不相同的字符为止,并记录最后一个相同的字符的索引right,然后第一个字符串与第三个字符串从头开始遍历时,如果遍历至索引right处还没遇到不同的字符,则停止遍历,从0到right的字符串即为这三个字符串的最长公共前缀,如果没有遍历至索引right处,就有不同的字符,则更新right的值,直至遍历完所有的字符串。

第二种:横向扫描:

        1.同时遍历所有的字符串的第i个字符是否与第一个字符串的第i个字符是否相同,如果出现不相同,那么最长公共前缀即到上一个字符为止。

代码

纵向扫描:

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);
}

总结

正常思路一般都会是先找出两个字符串的最长公共前缀,在用这个公共前缀和余下的字符串逐一寻找共同的前缀。

横向的思维是在网上看的,需要经常练习。拓宽思路,加油。

最新文章

  1. JavaScript基础知识之——Location 对象详解
  2. OFBIZ+ECLIPSE
  3. [学习笔记]设计模式之Command
  4. Java集合框架:Set、List、Map等介绍
  5. 使用jquery插件uploadify上传文件的方法与疑问
  6. Knockout简单用法
  7. JAVA反射机制基础概念
  8. python笔记:#012#函数
  9. linux系统裁剪
  10. TP5新增模块
  11. 观察者模式与.NET的delegate、event机制
  12. JS事件(二)事件对象
  13. Libevent源码分析系列【转】
  14. MapReduce实现矩阵乘法
  15. PHP编程时的规范化命名
  16. Entity Framework中实体模型命名空间的问题
  17. 创建list方法总结
  18. 判断RadioButtonList是否选中
  19. 【转】Android 4.0 Launcher2源码分析——启动过程分析
  20. 147.Insertion Sort List---链表排序(直接插入)

热门文章

  1. Centos 7 x86_64 环境Python2.7升级Python3.7.4
  2. 图解HTTP阅读笔记2
  3. spring第9天(事务)
  4. Web基础之Maven
  5. 三十一、CI框架之使用验证码
  6. comparable接口 和 comparator接口的特点与区别
  7. HashMap核心功能源码浅析
  8. Python爬虫之解析网页
  9. 了解redis
  10. java获取配置文件信息