문자열이 회문열인지 아닌지를 판단하다

1251 단어
회문 문자열이란 문자열로 왼쪽에서 오른쪽으로 읽는 것과 오른쪽에서 왼쪽으로 읽는 것은 완전히 같다. 예를 들어'aba'이다.
제목: 문자열이 회문인지 아닌지 판단
해법: 귀속
귀속 작용 은 문제 의 규모 를 끊임없이 줄여 문제 가 간단하게 해결될 때까지 줄이는 데 있다
질문: 어떻게 문제의 규모를 줄일 수 있습니까?
답: 관찰을 통해 알 수 있듯이 하나의 회문 문자열 중 내부도 회문이다.그래서 우리는 양쪽 문자를 제거하는 형식으로 층층이 검사하고 매번 검사할 때마다 두 문자를 제거하면 문제 규모를 줄이는 목적을 달성할 수 있다.
새로운 문제는 원래 문제와 같은 형식을 가지고 있다
양쪽 문자를 뺀 문자열은 이 문자열이 답장되었는지 확인하는 새로운 문제입니다.
귀속의 끝은 간단한 정경이 필요하다
1. 문자열 길이는 홀수 또는 짝수일 수 있습니다.
  • 문자열의 길이가 홀수이면 문자열은 가장 중간에 있는 문자가 남지만 회문에 영향을 주지 않는다.길이가 1이 되었을 때 이 문자열이 회문이라는 것을 나타냅니다
  • 문자열의 길이가 짝수라면 양쪽 문자열의 두 개를 비교한 후에 문자가 남지 않습니다.길이가 0이 되었을 때 이 문자열이 회문이라는 것을 나타냅니다

  • 2. 양쪽 끝에 두 문자가 다른 것으로 확인되면이 문자열은 답장이 아니므로 계속 검사할 필요가 없습니다.
    //1 ,0 
    #include 
    #include
    #include
    using namespace std;
    
    int n;
    char a[110];
    
    int fun(int l, int r, char *str, int len)
    {
        if (len==0||len==1)
            return 1;
        if (str[l]!=str[r])
            return  0;
        return fun(l+1,r-1,str,len-2);
    }
    int main()
    {
        scanf("%d%*c",&n);
        while(n--)
        {
            scanf("%s",a);
            int len=strlen(a);
            cout << fun(0,len-1,a,len) << endl;
        }
        return 0;
    }

    좋은 웹페이지 즐겨찾기