• 最长公共前缀-刷题总结


    最长公共前缀:

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

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

    示例 1:

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

    示例 2:

        输入: ["dog","racecar","car"]
        输出: ""
        解释: 输入不存在公共前缀。
    

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

    /**
    
    @author cosefy
    
    @date 2020/6/15
    */
    public class LongestCommonProfix {
    public static void main(String[] args) {
        String[] strs = {"flower", "flow", "flight"};
        String s1 = test1(strs);
        String s2 = test2(strs);
        System.out.println("最长公共前缀是:" + s1);
        System.out.println("最长公共前缀是:" + s2);
    }
    
    
    
    解法一:依次比较每个字符串的字符,得到公共字符

    思路:采用双重循环,依次比较每个字符串的字符。
    分析:时间效率较低。

    public static String test1(String[] strs) {
        StringBuffer s = new StringBuffer();
        boolean flag = true;
        if (strs.length == 0)
            return s.toString();
        if (strs.length == 1)
            return strs[0];
        for (int i = 0; i < minSzie(strs); i++) {   //第一层循环是每个字符串的第i个元素
            char temp = strs[0].charAt(i);
            for (int j = 1; j < strs.length; j++) {  //第二层循环表示第j个字符串
                if (temp == strs[j].charAt(i))
                    continue;
                else {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                s = s.append(temp);
            } else
                break;
        }
        return s.toString();
    }
    
    private static int minSzie(String[] strings) {    //函数用来得到字符串数组中最短字符串的长度
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < strings.length; i++) {
            if (min > strings[i].length())
                min = strings[i].length();
        }
        return min;
    }
    
    解法二:每两个字符串进行比较

    思路*:每次比较俩字符串,得出公共字符串,再和后面一个字符串比较。
    分析:效率较第一种解法腰快捷。

    public static String test2(String[] strs) {
    
    ​    if (strs.length == 0)
    ​        return "";
    ​    String res = strs[0];
    ​    for (int i = 1; i < strs.length; i++) {
    ​        int j = 0;
    ​        for (; j < res.length() && j < strs[i].length();j++){
    ​            if (res.charAt(j) != strs[i].charAt(j))
    ​                break;
    ​        }
    ​        res = res.substring(0, j);
    ​        if (res.equals(""))   //如果公共字符串为空,则直接返回""
    ​            return "";
    ​    }
    ​    return res;
    }
    }
    
  • 相关阅读:
    day12 bash中的if、for
    day11 grep正则匹配
    day10 nfs服务,nginx负载均衡,定时任务
    SpringMVC11文件上传
    SpringMVC10数据验证
    SpringMVC09异常处理和类型转化器
    SpringMVC08转发和重定向
    SpringMVC07处理器方法的返回值
    SpringMVC06以对象的方式获取前台的数据
    SpringMVC05使用注解的方式
  • 原文地址:https://www.cnblogs.com/cosefy/p/13137659.html
Copyright © 2020-2023  润新知