力扣网-最长公共前缀

问题简介

image-20220209205712558

编程思路

思路比较简单,

  • 从字符串数组中获取最短的字符串以减少外层循环。
  • 遍历最短字符串中的每个字符,是否都在数组中所有字符串的相应位置

代码实现

第一个版本-AC

    public String longestCommonPrefix(String[] strs) {

        StringBuilder stringBuilder = new StringBuilder();
        // 获取最短字符串
        String s = Arrays.stream(strs).max(Comparator.comparingInt(String::length).reversed()).get();
        for (int i = 0; i < s.length(); i++) {
            char charAt = s.charAt(i);
            if (checkChar(strs, i, charAt)) {
                stringBuilder.append(charAt);
            } else {
                return stringBuilder.toString();
            }

        }
        return stringBuilder.toString();
    }

    /**
     * 判断数组串中第i个字符是否等于基准字符
     *
     * @param strs 待校验的字符串数组
     * @param i    第i个位置
     * @param ch   判读第i个位置是否等于的基准字符
     * @return
     */
    private boolean checkChar(String[] strs, int i, char ch) {
        for (String str : strs) {
            if (str.charAt(i) != ch) {
                return false;
            }
        }
        return true;
    }

第二个版本

    public String longestCommonPrefix(String[] strs) {

        StringBuilder stringBuilder = new StringBuilder();
        // 获取最短字符串
        String s = getSmallestStr(strs);
        for (int i = 0; i < s.length(); i++) {
            char charAt = s.charAt(i);
            if (checkChar(strs, i, charAt)) {
                stringBuilder.append(charAt);
            } else {
                return stringBuilder.toString();
            }

        }
        return stringBuilder.toString();
    }

    /**
     * 从字符串数组中获取最短的字符串
     *
     * @param strs 字符串数组 {"flower", "flow", "flight"} 返回"flow"
     * @return
     */
    private String getSmallestStr(String[] strs) {
        return Arrays.stream(strs).max(Comparator.comparingInt(String::length).reversed()).get();
    }

    /**
     * 判断数组串中第i个字符是否等于基准字符
     *
     * @param strs 待校验的字符串数组
     * @param i    第i个位置
     * @param ch   判读第i个位置是否等于的基准字符
     * @return
     */
    private boolean checkChar(String[] strs, int i, char ch) {
        for (String str : strs) {
            if (str.charAt(i) != ch) {
                return false;
            }
        }
        return true;
    }

总结

 新年就这样度过了,我没少让俺爸操心,希望吧,在新的一年里能让父母放心。还有就是白天尽量不要喝酒,不然很难受,白天是我们奋斗的时候,可以用来聊天,说话,沟通,如果睡过去的话,挺遗憾的

身不饥寒,天未曾负我;

学无长进,我何以对天。

 看了一篇文章,讲述的是如何维持良好的状态的。在此做个记录。

  • 能控制早晨的人,方可控制人生。
  • 在你沉醉于清晨的美梦时,他人已经走在为梦想拼搏的路上了,最可怕不是别人比你聪明,而是比你聪明的人,比你还努力。
  • 成功的人都是相似的,他们懂得克制,善于利用时间,不把有限的时间用在无谓的事情上。
  • 重组的睡眠是提高效率的前提,但并不意味着可以无止境地赖在床上。
  • 别再晚睡,看着你眼睛下的黑眼圈,那是你熬夜看手机、电脑带来的。
  • 富兰克林曾说:“我未曾见过一个早起勤奋的、谨慎诚实的人抱怨命运不好。”

2022年2月9日21:41:53于宋营

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值