垂直扫描法

最长公共前缀

http://www.nowcoder.com/questionTerminal/28eb3175488f4434a4a6207f6f484f47

下面的可能是最容易想到的最普通的题解了吧
垂直扫描法

import java.util.*;


public class Solution {
    /**
     * 
     * @param strs string字符串一维数组 
     * @return string字符串
     */
    public String longestCommonPrefix (String[] strs) {
        //特殊情况处理
        if(strs==null||strs.length==0) return "";
        if(strs.length==1) return strs[0];
        //找出长度最短字符串的元素的索引
        int minLengthIndex=0 ;
        for(int i=1;i<strs.length;i++){
            if(strs[i].length()<strs[minLengthIndex].length() ){
                minLengthIndex = i;
            }
        }
        //最短字符串交换到0号位置
        if(minLengthIndex!=0){
            String temp = strs[0];
            strs[0]=strs[minLengthIndex];
            strs[minLengthIndex]=temp;
        }
        //取出0号元素的第i个字符,查询后面元素的第i个字符是否与之相同
        for(int i=0;i<strs[0].length();i++){
            char ch = strs[0].charAt(i);
            for(int j=1;j<strs.length;j++){
                if(ch!=strs[j].charAt(i)){
                    //遇到不相同的返回0号元素前面已验证通过的子串//i=0时 会返回""
                    return strs[0].substring(0,i); 
                }
            }
        }
        //直到0号元素的字符遍历完毕,返回0号元素的值
        return strs[0];
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务