[Leetcode] 14 : 가장 긴 공통 접두사

[Leetcode] 14 : 가장 긴 공통 접두사
문자열 배열에서 가장 긴 공통 접두사를 찾는 함수를 작성합니다.

공통 접두사가 없으면 빈 문자열 ""이 반환됩니다.

示例 1:

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

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

기술:

모든 항목에는 소문자 az 만 포함됩니다.

대답

이 질문은 비교적 간단하지만 간단한 질문을 할 수 있다고해서 잘 할 수 있다는 의미는 아닙니다. 나는 많은 사람들이 이것을 할 것이라고 생각합니다.

1. 먼저 str1과 str2의 공통 문자열 s1을 찾으십시오 (참고 : str1은 첫 번째 문자열을 나타내고 str2는 두 번째 문자열을 나타냄).

2. 그런 다음 s1과 str3의 공통 접두사 s2를 찾습니다.

3. 그런 다음 s2와 str4의 공통 접두사 s3를 찾습니다.

4. 두 문자열 사이의 공통 접두사를 저장하는 변수를 사용하여 이와 같이 반복적으로 반복합니다.

이 방법은 생각하기 가장 쉽지만 특별히 좋지는 않습니다. 사실 우리는 이것을 할 수 있습니다 : 수평으로 하나의 문자열을 순회하는 대신에 수직 접근을 사용합니다. 예를 들어,이 [ "flower", "flow", "flight"]. 우리는 그것을 2 차원 문자 배열로 취급합니다.

f l o w e r
f l o w
f l i g h t

그런 다음 수직으로 이동하여 열별로 순회합니다. 특정 열에 다른 문자가 표시되는 한 순회가 종료됩니다. 예를 들어, 위의 예에서 세 번째 열은 다르게 표시되므로 순회가 끝나고 처음 두 열이 반환됩니다. 코드 쇼 :


    public static String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length <= 0) {
            return "";
        }
        String s = "";
        for (int j = 0; j < strs[0].length(); j++) {
            char c = strs[0].charAt(j);
            // 开始纵向遍历
            for (int i = 1; i < strs.length; i++) {
                if (j >= strs[i].length() || c != strs[i].charAt(j)) {
                    return s;
                }
            }
            s += c;
        }
        return s;
    }

과거

[Leetcode] 13 : 로마 숫자에서 정수로

[Leetcode] 14 : 가장 긴 공통 접두사

QR 코드

추천

출처blog.51cto.com/15015171/2555006