每日一刷:最长公共前缀
时间:2022-07-22
本文章向大家介绍每日一刷:最长公共前缀,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
自言自语
题目来源于leetcode,每日一刷小算法。
不管遇到什么挫折,明天的太阳都会照样升起
题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例1
输入: ["flower","flow","flight"] 输出: "fl"
示例2
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明
所有输入只包含小写字母 a-z 。
思路
暴力解法
首先使用for循环让数组遍历。在这个循环中,让每个字符串里面的字符一一对比,直到对比到不相同的字符就退出。然后在这个不同的位置上切割,把前面相同的部分取出来。把取出来的这部分拿到跟下一个字符串对比。
例如:["lexinhu","lexinw","lexi"]
让前两个字符串中两个字符一一对比(可以用到while循环),到h和w这两个不同的位置时跳出循环,截取lexin,让lexin与lexi对比,截取到lexi,返回lexi即可。
Java自带的方法
针对上面的思路,我们可以用Java-String中的startWith()方法,判断第二个字符串是否以第一个字符串开头,如果不是,让第一个字符串裁剪掉一个尾部字符,继续对比。
例如:["lexinhu","lexinw","lexi"]
使用lexinhu与lexinw对比,不同时,lexinhu裁剪掉u,剩下lexinh,继续对比,直到lexin,刚好lexinw是以这个开头的,此时这个公共部门就是lexin,跟第三个字符lexi对比,执行相同的操作。
代码实现
暴力解
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String s = strs[0];
for (int i = 1; i < strs.length; i++) {
int index = 0;
while (
index < (Math.min(s.length(),strs[i].length()))
&& s.charAt(index) == strs[i].charAt(index)
){
index++;
}
s = strs[i].substring(0, index);
if(s.length() == 0){
return s;
}
}
return s;
}
}
优化后
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String s = strs[0];
for (int i = 1; i < strs.length; i++) {
while(!strs[i].startsWith(s)){
s = s.substring(0, s.length()-1);
}
}
return s;
}
}
- [快学Python3]目录与文件操作
- Codeforces Round #411 (Div. 2)(A,B,C,D 四水题)
- [快学Python3]INI文件读写
- [快学Python3]迭代器和生成器
- [快学Python3]模块和包
- 除法取模与逆元/费马小定理
- [快学Python3]类基础
- 邻接矩阵存储有向图(详解)
- [快学Python3]二分查找[策略优化版本]
- 使用 zipfile 解压含有中文文件名的 zip 文件
- qsc oj 22 哗啦啦村的刁难(3)(随机数,神题)
- [快学Python3]数据结构与算法-二分查找
- [快学Python3]数据结构-队列
- 51Nod 1090 3个数和为0(暴力)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 洛谷2014 选课(树形DP)树形背包问题
- CF1288C-Two Arrays (DP)
- Java开发编程规范: 1.命名风格
- 图论——Tarjan 初步 DFS序+时间戳+欧拉序
- POJ 1330 Nearest Common Ancestors(裸LCA)
- 数学--数论--广义欧拉降幂(模板)
- 图论--LCA--在线RMQ ST
- 微信小程序-基于高德地图API实现天气组件(动态效果)
- PG13 B-tree索引去重
- egg中 controller 调用controller如何实现
- CF思维联系– CodeForces -CodeForces - 992C Nastya and a Wardrobe(欧拉降幂+快速幂)
- 数学--数论--欧拉降幂--P5091 欧拉定理
- 重学巩固你的Vuejs知识(上)
- js原生模态登录框
- 客户决策 | 我的代码没有else