zoukankan      html  css  js  c++  java
  • Leet Code 14.最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

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

    思路

    不断比较每个字符串的单个字符,若相等则用加入StringBuilder,直到不相等。

    提交代码

    import java.util.*;
    import static java.lang.Math.min;
    
    public class leetcode {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int n = scan.nextInt();
            String str1 = scan.nextLine();
            String[] str = new String[n];
            for(int i = 0; i < n; i++) {
                str[i] = scan.nextLine();
            }
            String result = longestCommonPrefix(str);
            System.out.println(result);
        }
    
        public static String longestCommonPrefix(String[] str) {
            StringBuilder str_result = new StringBuilder();
            if(str.length == 0) return "";
            int length = str[0].length();
            for(int i = 1; i < str.length; i++)
                length = Math.min(length, str[i].length());
            for(int i = 0; i < length; i++) {
                boolean same = true;
                char first = str[0].charAt(i);
                for(int j = 1; j < str.length; j++) {
                    if(str[j].charAt(i) != first) {
                        same = false;
                        break;
                    }
                }
                if(same == true) {
                    str_result = str_result.append(first);
                }
                else {
                    break;
                }
            }
            return str_result.toString();
        }
    }
    

    其他人的解法

    水平扫描

    String字符串有一个indexOf(String str)方法。查找指定字符或字符串在字符串中第一次出现地方的索引,未找到的情况返回 -1.

    public String longestCommonPrefix(String[] strs) {
       if (strs.length == 0) return "";
       String prefix = strs[0];
       for (int i = 1; i < strs.length; i++)
           while (strs[i].indexOf(prefix) != 0) {
               prefix = prefix.substring(0, prefix.length() - 1);
               if (prefix.isEmpty()) return "";
           }        
       return prefix;
    }
    将第一个字符串与第二个字符串比较,相同的字符串再与第三个字符串比较。
    while循环:如果index返回不是0,说明第二个字符串没有第一个字符串,那么就把第一个字符串减少,直到返回0,说明第二个字符串有开头相同的。如果prefix为 "",说明第一个第二个字符串没有相同的,可以直接结束。
    

    这个思路很好,主要点是对indexOf()函数的认识

  • 相关阅读:
    C2B未来:大数据定制
    Linux开发环境的搭建和使用——Linux 常用的命令使用
    iebook 发布到网站 独家秘诀
    ZOJ 2679 Old Bill(数学)
    DFA最小化 -- Hopcroft算法 Python实现
    How to initialize a static const map in c++?
    新秀操作和维护注意事项:Windows关于使用Xshell管理你的云主机
    HDOJ 4883 TIANKENG’s restaurant
    谈论multistage text input(中国输入法)下一个UITextView内容长度的限制
    iOS 网络错误-分类
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12618246.html
Copyright © 2011-2022 走看看