C++LeetCode(28.strStr()함수 구현)

[LeetCode]28.구현 strStr()구현 strStr()함수
Implement  strStr() .
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
Input: haystack = "hello", needle = "ll"
Output: 2
Example 2:
Input: haystack = "aaaaa", needle = "bba"
Output: -1
Clarification:
What should we return when needle is an empty string? This is a great question to ask during an interview.
For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C's  strstr()  and Java's  indexOf() .
이 문 제 는 한 문자열 에서 다른 문자열 이 처음 나타 난 위 치 를 찾 도록 합 니 다.먼저 판단 을 해 야 합 니 다.하위 문자열 이 비어 있 으 면 0 으로 돌아 갑 니 다.하위 문자열 의 길이 가 모 문자열 의 길이 보다 크 면-1 로 돌아 갑 니 다.그리고 모 문자열 을 옮 겨 다 니 기 시작 합 니 다.여 기 는 모 문자열 전 체 를 옮 겨 다 니 지 않 고 남 은 길이 와 하위 문자열 이 같은 위치 로 옮 겨 다 니 면 연산 효율 을 높 일 수 있 습 니 다.그 다음 에 모든 문자 에 대해 하위 문자열 을 한 번 씩 옮 겨 다 니 며 한 문자 의 대응 비 교 를 합 니 다.해당 위치 가 다 르 면 순환 을 뛰 어 넘 습 니 다.순환 을 계속 뛰 지 않 으 면 하위 문자열 이 나타 나 면 시작 위치 로 돌아 가면 됩 니 다.코드 는 다음 과 같 습 니 다.

class Solution {
public:
    int strStr(string haystack, string needle) {
        if (needle.empty()) return 0;
        int m = haystack.size(), n = needle.size();
        if (m < n) return -1;
        for (int i = 0; i <= m - n; ++i) {
            int j = 0;
            for (j = 0; j < n; ++j) {
                if (haystack[i + j] != needle[j]) break;
            }
            if (j == n) return i;
        }
        return -1;
    }
};
우 리 는 좀 더 간결 하 게 쓸 수 있다.처음에 두 개의 for 순환 을 직접 설정 하고 종료 조건 을 쓰 지 않 은 다음 에 j 가 needle 의 끝 에 도착 하면 이때 i 로 돌아 갈 것 이 라 고 판단 할 수 있다.이때 i+j 가 haystack 길이 에 도달 하면 되 돌아 오기-1;그렇지 않 으 면 현재 대응 하 는 문자 가 일치 하지 않 으 면 현재 순환 에서 바로 뛰 어 내 립 니 다.코드 는 다음 과 같 습 니 다.
해법 2:

class Solution {
public:
    int strStr(string haystack, string needle) {
        for (int i = 0; ; ++i) {
            for (int j = 0; ; ++j) {
                if (j == needle.size()) return i;
                if (i + j == haystack.size()) return -1;
                if (needle[j] != haystack[i + j]) break;
            }
        }
        return -1;
    }
};
C++구현 LeetCode(28.strStr()함수 실현)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++구현 구현 구현 strStr()함수 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기