아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

문자열 변환

시간 제한1초메모리 제한256 MB

요약
주어진 두 균형 a/b 문자열을 모든 중간 문자열이 균형을 유지하도록 인접한 두 문자를 교환해 변환하는 최소 횟수를 구하고 불가능하면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
트리, 스택, 그리디
정답자
아직 제출이 없습니다

문제

좋은 문자열은 다음과 같이 정의한다.

  1. ab는 좋은 문자열이다.
  2. 문자열 SS가 좋은 문자열이면, 앞과 뒤에 각각 a와 b를 붙인 aSbaSb도 좋은 문자열이다.
  3. 문자열 SS와 TT가 좋은 문자열이면, 이어 붙인 STST도 좋은 문자열이다.

좋은 문자열 AA와 BB가 주어진다. 인접한 두 문자를 서로 바꾸는 연산만 써서 AA를 BB로 바꾸려고 한다. 바꾸는 도중에 나타나는 문자열도 모두 좋은 문자열이어야 한다. 필요한 연산의 최소 횟수를 구하는 프로그램을 작성하시오.

예를 들어 AA가 aabbabab이고 BB가 aaaabbbb이면 다섯 번의 연산으로 AA를 BB로 바꿀 수 있다. 대괄호는 그 단계에서 서로 바꾸는 두 문자이다.

aabba[ba]b → aab[ba]abb → aaba[ba]bb → aa[ba]abbb → aaa[ba]bbb → aaaabbbb

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다.

이어서 각 테스트 케이스마다 한 줄에 문자열 AA와 BB가 공백으로 구분되어 주어진다. AA와 BB는 좋은 문자열이고, 길이는 각각 2 이상 100,000 이하이다.

출력

각 테스트 케이스마다 AA를 BB로 바꾸는 데 필요한 연산의 최소 횟수를 한 줄에 하나씩 출력한다. 바꿀 수 없으면 -1을 출력한다.

예제6

  1. 예제 1

    입력
    2
    aabbabab aaaabbbb
    aabbab abaabb
    
    예상 출력
    5
    2
    
  2. 예제 2

    입력
    1
    ab ab
    
    예상 출력
    0
    
  3. 예제 3

    입력
    3
    ab ab
    abab aabb
    aabb abab
    
    예상 출력
    0
    1
    1
    
  4. 예제 4

    입력
    2
    ab aabb
    aaaabbbb aabbab
    
    예상 출력
    -1
    -1
    
  5. 예제 5

    입력
    1
    abababababababababab aaaaaaaaaabbbbbbbbbb
    
    예상 출력
    45
    
  6. 예제 6

    입력
    4
    aaabbb ababab
    ababab aaabbb
    aabbaabb abaabbab
    abaabbab aabbaabb
    
    예상 출력
    3
    3
    3
    3