문자열 이동에 포함된 문제 (★)

1892 단어

문제 설명


두 개의 문자열 s1과 s2를 지정하여 s1을 통해 순환 이동 (rotate)을 통해 얻을 수 있는 문자열이 s2에 포함되어 있는지 판단합니다.

샘플 입력


AABCD CDAA ABCD ACBD

샘플 출력


true false

코드

#include 
#include 

bool search(char* src, char* des, int startIndex);

int main(int argc, char** argv) {
    char src[100];
    char des[100];
    
    while(scanf("%s %s",src,des) != EOF)
    {
        int len = strlen(src);
        
        int index = 0;
        for(; index < len; ++index)
        {
            if (src[index] == des[0])
            {
                bool success = search(src, des, index);    
                if (success){
                    printf("true
"); break; } } } if (index == len) { printf("false
"); } } return 0; } bool search(char* src, char* des, int startIndex) { int srcLen = strlen(src); int desLen = strlen(des); int index = 0; for(; index < desLen; ++index) { if (src[startIndex] == des[index]) { ++startIndex; startIndex %= srcLen; } else { break; } } return index == desLen; }

아이디어 및 코드 설명

  • startIndex %= srcLen;는 순환이동과 관련된 곳에서 운영체제에서'생산자-소비자'의 모델을 떠올릴 수 있다.이렇게 남은 것을 대열의 앞머리로 되돌리는 방법은 논리적으로 대열의 앞머리와 끝을 연결하는 것과 같다.
  • if (src[index] == des[0]) 가속에 사용됩니다.검색 함수에 대한 봉인 때문에 들어갈 때마다 strlen () 을 두 번 호출해야 합니다.검색 ()에 대한 호출을 줄이면 그 정도의 시간을 절약할 수 있겠지.
  • 원본의source를 복제하여 원본의source 뒤에 받고strst() 함수를 호출하여 포함 여부를 판단하는 방법과 비교하면 공간을 절약할 수 있다.진정으로 src수조를 순환하여 자리를 옮기는 방법과 비교하면 비교적 시간을 절약할 수 있다.
  • 좋은 웹페이지 즐겨찾기