>백엔드 개발 >PHP 튜토리얼 >. 이상한 프린터

. 이상한 프린터

WBOY
WBOY원래의
2024-08-22 06:48:03445검색

. Strange Printer

664. 이상한 프린터

난이도:어려움

주제: 문자열, 동적 프로그래밍

다음과 같은 두 가지 특별한 속성을 가진 이상한 프린터가 있습니다.

  • 프린터는 매번 동일한 문자의 순서만 인쇄할 수 있습니다.
  • 각 차례마다 프린터는 어떤 위치에서 시작하고 끝나는 새 문자를 인쇄할 수 있으며 원래의 기존 문자를 덮습니다.

문자열 s가 주어지면 프린터가 인쇄하는 데 필요한 최소 회전 수를 반환합니다.

예 1:

  • 입력: s = "aaabbb"
  • 출력: 2
  • 설명: "aaa"를 먼저 인쇄한 다음 "bbb"를 인쇄하세요.

예 2:

  • 입력: s = "aba"
  • 출력: 2
  • 설명: 먼저 "aaa"를 인쇄한 다음 문자열의 두 번째 위치부터 "b"를 인쇄합니다. 이는 기존 문자 'a'를 덮습니다.

제약조건:

  • 1 <= s.length <= 100
  • s는 영문 소문자로 구성됩니다.

해결책:

동적 프로그래밍을 사용할 수 있습니다. 문자열을 하위 문제로 나누어 인쇄하는 데 필요한 회전 수를 최소화하는 것이 아이디어입니다.

동적 프로그래밍을 사용하면 문제를 해결할 수 있습니다. 아이디어는 s의 모든 하위 문자열을 인쇄하는 데 필요한 최소 회전 수를 결정하는 더 작은 하위 문제로 문제를 나누는 것입니다. 다음 관찰을 활용할 수 있습니다.

  • 인접한 두 문자가 동일한 경우 새 작업으로 계산하지 않고 이전 작업을 확장할 수 있습니다.

동적 프로그래밍 솔루션

dp[i][j]를 하위 문자열 s[i:j+1]을 인쇄하는 데 필요한 최소 회전 수로 설정합니다.

  1. s[i] == s[j]이면 dp[i][j] = dp[i][j-1]입니다. 왜냐하면 마지막 문자 s[j]는 이전 작업으로 인쇄될 수 있기 때문입니다.
  2. 그렇지 않으면 모든 i <= k <에 대해 dp[i][j] = min(dp[i][k] + dp[k+1][j])입니다. j.

이 솔루션을 PHP로 구현해 보겠습니다. 664. 이상한 프린터






설명:

  1. DP 배열: 2D 배열 dp[i][j]는 인덱스 i에서 j까지 하위 문자열을 인쇄하는 데 필요한 최소 회전 수를 나타냅니다.

  2. 초기화: 한 번에 한 문자를 인쇄할 수 있으므로 dp[i][i] = 1로 초기화합니다.

  3. DP 테이블 채우기:

    • i와 j의 문자가 동일한 경우($s[$i] == $s[$j]), i에서 j로 인쇄하는 데는 i에서 j-1로 인쇄하는 것과 동일한 회전 수가 걸립니다. $s[$j]는 $s[$i]와 같은 순서로 인쇄될 수 있습니다.
    • 다르면 끈을 서로 다른 지점(k)으로 나누어 최소 회전 수를 구하려고 합니다.
  4. 결과: 전체 문자열을 인쇄하는 데 필요한 최소 회전 수는 dp[0][$n - 1]에 저장됩니다.

이 솔루션은 문자열을 분할하고 인쇄하는 가능한 모든 방법을 고려하여 문자열 인쇄에 필요한 최소 회전 수를 효율적으로 계산합니다.

연락처 링크

이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!

이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요.

  • 링크드인
  • 깃허브

위 내용은 . 이상한 프린터의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.