>  기사  >  백엔드 개발  >  Q 쿼리의 경우 다음을 중국어로 번역합니다. 삼항 문자열에서 모든 회문 하위 문자열을 제거하기 위해 바꿔야 하는 최소 문자 수

Q 쿼리의 경우 다음을 중국어로 번역합니다. 삼항 문자열에서 모든 회문 하위 문자열을 제거하기 위해 바꿔야 하는 최소 문자 수

WBOY
WBOY앞으로
2023-09-07 10:29:02582검색

Q 쿼리의 경우 다음을 중국어로 번역합니다. 삼항 문자열에서 모든 회문 하위 문자열을 제거하기 위해 바꿔야 하는 최소 문자 수

회문 문자열은 반전된 문자열과 동일한 문자열입니다. '0', '1', '2'를 포함하는 문자열과 길이 N의 배열 Q가 주어지면, 주어진 배열의 각 인덱스는 범위를 나타내며, 범위는 형식의 값 쌍으로 표시됩니다. 범위에 회문 하위 문자열이 없는지 확인하기 위해 지정된 범위에서 바꿔야 하는 최소 문자 수를 찾아야 합니다.

예제 예

으아악 으아악

Explanation

의 중국어 번역은

Explanation

입니다.

0부터 4까지의 범위에는 두 개의 회문 010과 1001이 있습니다. 회문이 남지 않도록 인덱스 2를 '2'로 변경할 수 있습니다.

2~5 범위의 경우 회문 번호는 010 하나만 있으며 첫 번째 0을 2로 변경하여 변경할 수 있습니다.

5~10 범위의 숫자에는 회문 번호 020, 000 및 20002가 있습니다. 모든 회문을 제거하려면 처음 2를 '1'로, 다음 인덱스의 '0'을 '2'로, 두 번째부터 마지막 ​​인덱스의 값을 '1'로 변경할 수 있습니다.

Naive Approach

의 중국어 번역은

Naive Approach

입니다.

이 방법의 아이디어는 주어진 범위의 모든 조합을 얻고 회문 없이 조합에 필요한 최소 변경 횟수를 찾는 것입니다. 하지만 문제는 시간복잡도이다.

이 방법을 구현하려면 재귀 호출을 수행하고 문자열을 반복해야 합니다. 각 인덱스에는 세 가지 선택 사항이 있으므로 모든 문자열을 3^N으로 만드는 데 시간이 복잡해집니다. 이제 우리는 Q 쿼리에 응답해야 하며 각 경우에 대해 회문 문자열을 제거하면 시간 복잡도가 O(Q*N*(3^N))이 되는지 확인해야 합니다.

재귀 호출의 경우 공간 N을 유지해야 합니다. 이는 공간 복잡도가 O(N)임을 의미합니다.

동적 계획

Idea

의 중국어 번역은

Idea

입니다.

이 질문의 아이디어는 주어진 범위에서 회문 번호를 찾을 필요가 없다는 것입니다. 가능한 최소 회문 길이는 짝수의 경우 2이고 홀수의 경우 3입니다.

우리는 세 가지 다른 문자를 가지고 있으며 회문 없이 주어진 문자열을 만들려면 이들 모두가 필요합니다. 전체 크기 선택 또는 시퀀스가 ​​있습니다. 회문이 존재하지 않는 방식으로 시퀀스를 형성할 수 있으며 이러한 시퀀스는 문자열 '012'의 순열입니다.

dp 배열이나 벡터를 사용하여 가능한 모든 사례를 저장하고 각 시퀀스는 더 적은 수의 문자를 제공하며 해당 시퀀스를 사용합니다.

구현

구현 부분에서는 먼저 문자열, 시퀀스, DP 벡터 및 시퀀스 수를 매개변수로 받아들이고 DP 벡터를 업데이트하는 함수를 생성합니다.

이 함수에서는 먼저 첫 번째 인덱스 값을 업데이트한 다음 일치하지 않는 각 사례에 대해 DP 벡터의 현재 인덱스 값을 업데이트합니다.

가능한 모든 시퀀스를 수동으로 입력하고 이를 배열에 저장하고 DP 벡터를 생성하는 또 다른 함수를 만들어 보겠습니다.

전처리를 위한 값을 전달하여 위 함수를 호출한 후 하나씩 처리하여 각 쿼리에 응답하겠습니다.

Example

의 중국어 번역은

Example

입니다. 으아악

출력

으아악

시간과 공간의 복잡성

위 코드의 시간 복잡도는 O(N + Q)입니다. 여기서 N은 문자열의 문자 수이고 Q는 쿼리 수입니다.

위 코드의 공간 복잡도는 O(N)입니다. 왜냐하면 상태를 N 크기의 벡터에 저장하기 때문입니다.

결론

이 튜토리얼에서는 회문 문자열을 남기지 않도록 특정 범위에서 일부 쿼리를 수행할 때 변경해야 하는 최소 문자 수를 알아내는 코드를 구현했습니다. 우리는 시간 복잡도가 O(N+Q)이고 공간 복잡도가 O(N)인 동적 프로그래밍 개념을 사용하여 이 코드를 구현했습니다.

위 내용은 Q 쿼리의 경우 다음을 중국어로 번역합니다. 삼항 문자열에서 모든 회문 하위 문자열을 제거하기 위해 바꿔야 하는 최소 문자 수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제