zoukankan      html  css  js  c++  java
  • Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings.

    找出所有字符串中的共同字符串前缀。

    方法一:让第一个字符串作为基准,遍历该字符串,依次将该字符串中的每个字符跟其他所有字符串相应字符比较,只要有一个不一样,就停止。

    其实正确的基准应该是选择字符串长度最小的,这里没有选择,就会出现下标越界,可以用try-catch处理,只要出现越界异常,该字符就不会相等

    public  String longestCommonPrefix(String[] strs) {
                if(strs==null||strs.length==0)
                    return "";
                if(strs.length==1)
                    return strs[0];
                int i;
                //遍历基准字符串中的每个字符,并去所有 其他字符串比对该位置上是不是此字符,如果是,则比较下一个字符,不是则跳出循环
                for(i=0;i<strs[0].length();i++){
                   if(!comm(strs,i,strs[0].charAt(i))){
                       break;
                   }
                }
                if(i>0){
                return strs[0].substring(0, i);
                }else
                    return "";
            }
            //比较所有字符串的第k个位置上的字符是不是c,只要有一个不是,或者下标越界异常,就返回false,表示该字符不满足。
            public   boolean comm(String[] strs,int k,char c){
                
                for(int i=1;i<strs.length;i++){
                    try{
                        if(strs[i].charAt(k)!=c)
                            return false;
                    }catch(IndexOutOfBoundsException e){
                        return false;
                    }
                }
                return true;
            }

    还有大神提出,先排序在比较第一个和最后一个字符串

    public  String longestCommonPrefix(String[] strs) {
            if(strs==null||strs.length==0) return "";
            if(strs.length==1) return strs[0];
            
            Arrays.sort(strs);
            
            char[] first=strs[0].toCharArray();
            char[] last=strs[strs.length-1].toCharArray();
            int i,j;
            for( i=0,j=0;i<first.length&&j<last.length;i++,j++){
                if(first[i]!=last[j]) break;
            }
            return strs[0].substring(0,i);
            
        }
  • 相关阅读:
    CF1290E Cartesian Tree
    【LeetCode】11. 盛最多水的容器
    【LeetCode】10. 正则表达式匹配
    【LeetCode】9. 回文数
    【LeetCode】8. 字符串转换整数 (atoi)
    【LeetCode】7. 整数反转
    【LeetCode】6. Z 字形变换
    【LeetCode】5. 最长回文子串
    【LeetCode】4. 寻找两个正序数组的中位数[待补充]
    【LeetCode】3. 无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8059128.html
Copyright © 2011-2022 走看看