> 백엔드 개발 > C++ > 본문

주어진 제약 조건 하에서 N개의 작업으로 문자열 'S'에서 N개의 문자를 제거한 후 값을 찾습니다.

王林
풀어 주다: 2023-08-26 22:29:18
앞으로
1334명이 탐색했습니다.

주어진 제약 조건 하에서 N개의 작업으로 문자열 S에서 N개의 문자를 제거한 후 값을 찾습니다.

문자열의 사용 사양은 무엇인가요?

주어진 문자열 S와 관련된 특정 과제를 해결하세요. 문자열 S에는 영어 소문자만 포함되며 문자를 제거할 때는 특정 제약 조건을 따라야 합니다.

주어진 제약조건은 -

  • S

  • 문자열에는 영문소문자가 있습니다
  • 문자열에 여러 번 나타나는 문자만 삭제할 수 있습니다.

  • 연속된 문자만 삭제할 수 있습니다. 다음 단계를 사용하여 문자열 S -

  • 에서 문자를 제거할 수 있습니다.
  • 문자열 S를 반복하면서 여러 번 나타나는 모든 문자를 찾습니다. 각 문자에 대해 문자열 S를 다시 반복하여 문자가 연속적으로 나타나는 모든 항목을 찾습니다.

  • 연속 문자 발생 횟수가 반복 횟수보다 크거나 같으면 처음 N 발생 문자를 삭제합니다.

  • 모든 반복이 완료될 때까지 2단계와 3단계를 계속합니다.

마지막으로 최종 문자열 S를 반환하면 N 연산 후 N 문자를 제거한 후 문자열의 값을 찾을 수 있습니다.

문법

이 주제는 특정 수의 작업을 수행하여 주어진 문자열을 조작하는 것과 관련된 코딩 질문입니다. 각 작업에서 문자열의 가장 일반적인 문자가 제거되고 나머지 각 문자의 빈도가 업데이트됩니다. 이 작업을 N번 수행한 후 남은 각 문자의 빈도를 제곱하고 합산하여 문자열의 최종 값을 계산합니다. 이 문제의 목표는 문자열과 숫자 N을 입력으로 받아 주어진 제약 조건에 따라 N 연산을 수행한 후 문자열의 최종 값을 출력하는 프로그램을 작성하는 것입니다.

다음은 주어진 제약 조건에서 문자열 S의 N 문자를 제거하기 위해 N 작업 후 값을 찾는 함수의 구문입니다. -

으아아아

이 함수는 두 개의 매개변수를 허용합니다 -

  • n - 수행할 작업 수를 나타내는 정수입니다.

  • s - 입력 문자열을 나타내는 문자열입니다.

함수는 먼저 배열을 사용하여 입력 문자열에서 각 문자의 빈도를 계산합니다. 그런 다음 이 빈도 배열은 내림차순으로 정렬되고 N 번 수행됩니다. 각 작업에서 가장 일반적인 문자의 빈도가 줄어들고 빈도 배열이 다시 정렬됩니다.

마지막으로 함수는 정렬된 빈도 배열에 있는 각 문자의 빈도 제곱을 더하여 문자열의 값을 계산하고 이를 정수로 반환합니다.

알고리즘

N개의 문자 제거 프로세스 후 알고리즘은 다음 제약 조건에 따라 문자열 값을 계산합니다. 입력은 숫자 N과 문자열 S로 구성됩니다.

  • 1단계 - 배열을 사용하여 입력 문자열에서 각 문자의 빈도를 결정합니다.

  • 2단계 - 이 주파수 배열을 내림차순으로 정렬합니다.

  • 3단계 - N 연산을 수행합니다. 각 연산은 주파수 배열에서 가장 빈번한 문자의 빈도를 줄입니다.

  • 4단계 - 주파수 배열을 재정렬합니다.

  • 5단계 - 정렬된 빈도 배열에 있는 각 문자의 빈도 제곱을 더하여 문자열 값을 결정합니다.

  • 6단계 - N 연산 후 문자열 값은 제곱의 합이 됩니다.

이 기술은 문제가 입력 문자열 S에서 N 문자를 제거해야 하기 때문에 작동합니다. 이는 각 작업이 문자열에서 가장 일반적인 문자를 한 번 제거하는 N 작업을 수행하는 것과 같습니다. 작업의 제약으로 인해 실제로 문자열에서 문자를 제거할 수 없으므로 각 작업의 빈도 배열에서 가장 일반적인 문자의 빈도를 줄여 이 작업을 시뮬레이션해야 합니다.

따라야 할 방법

방법 1

코드를 사용하여 샘플 문자열 S와 다양한 연산 N을 초기화합니다. 루프의 각 작업 후에 다음 문자보다 큰 초기 문자가 제거됩니다. 삭제하지 않으면 마지막 문자가 삭제됩니다. 모든 작업이 완료된 후 문자열의 최종 값을 인쇄합니다.

여기서 코드는 N이 문자열 S의 길이보다 작거나 같다고 가정합니다. N이 S보다 길면 코드가 예상대로 실행되지 않습니다.

예 1

으아아아

출력

으아아아

방법 2

이 코드에서는 먼저 배열을 사용하여 입력 문자열의 각 문자 빈도를 결정합니다. 다음으로 N 연산을 수행하여 각 연산에서 가장 일반적인 문자의 빈도를 줄이고 빈도 배열을 다시 정렬합니다. 다음으로 이 주파수 배열을 내림차순으로 정렬합니다.

문자열의 값은 정렬된 빈도 배열에 있는 각 문자의 빈도 제곱을 더하여 최종적으로 결정됩니다.

예 2

으아아아

출력

으아아아

결론

요약하자면, N 연산 후 값을 얻기 위해 직접적인 기술을 사용하면 위의 제약 조건 하에서 문자열 "S"에서 N 문자를 제거할 수 있습니다. 먼저, 문자열에 몇 개의 문자가 있는지 추적하기 위해 빈도 배열을 초기화하겠습니다. N개의 문자를 제거한 후에는 빈도 배열에서 가장 큰 문자를 제거하는 프로세스를 반복할 수 있습니다. 이 과정은 총 N번 반복될 수 있습니다.

이 방법을 사용하면 N 연산(N 문자 제거 포함) 후에 문자열 "S"의 값을 빠르게 확인할 수 있습니다. 이 방법에는 정렬 단계가 있기 때문에 이 솔루션의 시간 복잡도는 O(N logN)이며 이는 대부분의 실제 응용 프로그램에 허용됩니다.

위 내용은 주어진 제약 조건 하에서 N개의 작업으로 문자열 'S'에서 N개의 문자를 제거한 후 값을 찾습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!