목차
문제 설명
예제 예
들어가세요
출력
Explanation
방법 2
알고리즘
결론
백엔드 개발 C++ 이진 문자열에서 동일하지 않은 문자가 있는 인덱스의 문자 쌍을 교환하여 문자열이 회문 문자열을 형성할 수 있는지 확인합니다.

이진 문자열에서 동일하지 않은 문자가 있는 인덱스의 문자 쌍을 교환하여 문자열이 회문 문자열을 형성할 수 있는지 확인합니다.

Sep 02, 2023 pm 08:09 PM
이진 문자열 교환 회문 문자열

이진 문자열에서 동일하지 않은 문자가 있는 인덱스의 문자 쌍을 교환하여 문자열이 회문 문자열을 형성할 수 있는지 확인합니다.

문제 설명

문자열 str과 이진 문자열 B가 있습니다. 두 문자열의 길이는 N과 같습니다. 문자열 B에서 동일하지 않은 문자를 포함하는 인덱스 쌍에서 해당 문자를 여러 번 교환하여 문자열 str을 회문 문자열로 만들 수 있는지 확인해야 합니다.

예제 예

들어가세요

으아아아

출력

으아아아

Explanation

의 중국어 번역은

Explanation

입니다.

B[1]과 B[2]가 동일하지 않기 때문에 str[1]과 str[2]를 바꿀 수 있습니다. 최종 문자열은 'ASA'일 수 있습니다.

들어가세요

으아아아

출력

으아아아

Explanation

의 중국어 번역은

Explanation

입니다.

문자열 B에는 동일하지 않은 문자가 포함되어 있지 않기 때문에 문자열 회문을 만들 수 없습니다.

들어가세요

으아아아

출력

으아아아

Explanation

의 중국어 번역은

Explanation

입니다.

문자 빈도 불일치로 인해 문자열 str을 회문으로 만들 수 없습니다.

방법 1

첫 번째 방법에서는 문자열 str의 모든 문자를 사용하여 회문 문자열을 만들 수 있는지 확인합니다. 그렇다면 문자열 B에서 동일하지 않은 문자를 포함하는 인덱스 쌍의 문자를 교환하고 문자열을 회문으로 만들 수 있는지 확인할 수 있습니다. 그렇지 않으면 false를 반환합니다.

알고리즘

  • 1단계 - 유틸리티() 함수를 실행하고 주어진 조건에 따라 문자를 교환하여 문자 교환을 통해 문자열이 회문이 될 수 있는지 확인합니다.

  • 2단계 - canBePalindromic() 함수를 정의하여 str 문자를 사용하여 회문 문자열을 구성할 수 있는지 확인합니다.

  • 2.1단계 − 문자열 str의 각 문자와 해당 빈도를 저장하는 맵을 만듭니다. for 루프를 사용하여 문자열을 반복하고 문자 빈도를 계산합니다.

  • 2.2단계 - 짝수 및 홀수 빈도의 문자 수를 셉니다.

  • 2.3단계 - 문자열에 있는 고유 문자의 총 개수를 가져오려면 set을 사용하세요.

  • 2.4단계 − 문자열 길이가 홀수이고 홀수 빈도의 문자가 하나만 포함되어 있으면 true를 반환합니다.

  • 2.5단계 − 문자열 길이가 짝수이면 빈도가 짝수인 모든 문자와 홀수 빈도가 있는 0개의 문자가 true를 반환합니다.

  • 2.6단계 − false를 반환합니다.

  • 3단계 - 문자열이 회문이 될 수 없으면 false를 반환합니다.

  • 4단계 - 문자열 B에 '1'과 '0'이 여러 개 포함되어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

으아아아

출력

으아아아
  • 시간 복잡도 - O(NlogN), for 루프를 사용하여 문자열을 순회하고 set의 insert() 메서드에 (logN) 시간이 걸리기 때문입니다.

  • Space Complexity - O(K), 여기서 K는 총 고유 문자 수입니다.

방법 2

이 방법에서는 맵을 사용하는 대신 배열을 사용하여 문자의 빈도를 저장합니다.

알고리즘

  • 1단계 - 길이가 26인 'charFrequancy' 배열을 만들고 0으로 초기화합니다.

  • 2단계 - 문자열 B에 있는 1과 0의 총 개수를 셉니다.

  • 3단계 - 배열에 있는 각 문자의 빈도를 업데이트합니다.

  • 4단계 - 문자열 길이가 짝수이고 홀수 빈도가 0이 아닌 경우 false를 반환합니다.

  • 5단계 - 문자열 길이가 홀수이고 홀수 빈도가 1보다 큰 경우 false를 반환합니다.

  • 6단계 - 문자열에 1과 0이 모두 있으면 true를 반환합니다.

  • 7단계 - false를 반환합니다.

으아아아

출력

으아아아
  • 시간 복잡도 - O(N) for 루프를 사용하여 문자열을 반복하기 때문입니다.

  • 공간 복잡도 − O(1) 왜냐하면 항상 길이가 26인 배열을 사용하기 때문입니다.

결론

주어진 조건에 따라 문자를 교환하여 문자열이 회문이 될 수 있는지 확인하는 두 가지 방법을 배웠습니다. 첫 번째 방법은 컬렉션과 맵을 사용하는 반면, 두 번째 방법은 배열만 사용하여 데이터를 저장합니다. insert() 메서드는 컬렉션에 데이터를 삽입하는 데 O(logn) 시간이 걸리는 반면, 배열은 O(1) 시간만 걸리기 때문에 두 번째 방법이 첫 번째 방법보다 낫습니다.

위 내용은 이진 문자열에서 동일하지 않은 문자가 있는 인덱스의 문자 쌍을 교환하여 문자열이 회문 문자열을 형성할 수 있는지 확인합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 22.04 LTS에 스왑 공간을 추가하는 방법 Ubuntu 22.04 LTS에 스왑 공간을 추가하는 방법 Feb 20, 2024 am 11:12 AM

스왑 공간은 Linux 시스템에서 중요한 역할을 하며, 특히 시스템의 메모리가 부족한 경우 더욱 그렇습니다. 높은 부하에서도 시스템이 원활하게 실행되고 안정성을 유지할 수 있도록 도와주는 백업 메모리 저장 공간 역할을 합니다. 이 문서에서는 시스템 성능이 최적화되고 다양한 작업 부하를 처리할 수 있도록 Ubuntu 22.04LTS에 스왑 공간을 추가하는 방법에 대한 자세한 가이드를 제공합니다. 스왑 공간 이해 스왑 공간은 시스템의 물리적 RAM을 보완하는 데 사용되는 가상 메모리를 제공합니다. 시스템의 RAM이 부족하면 커널은 메모리 부족 및 시스템 충돌을 방지하기 위해 데이터를 디스크로 교환합니다. Linux 시스템은 일반적으로 이러한 상황을 처리하기 위해 스왑 공간을 사용합니다. 여러 메모리 집약적 애플리케이션을 동시에 실행하여 매우 큰 파일이나 데이터를 처리합니다.

이진 문자열에서 증가하지 않는 가장 긴 하위 시퀀스 이진 문자열에서 증가하지 않는 가장 긴 하위 시퀀스 Sep 07, 2023 pm 11:13 PM

이 문제에서는 주어진 문자열에서 증가하지 않는 가장 긴 부분 수열을 찾아야 합니다. 증가하지 않는다는 것은 문자가 동일하거나 내림차순임을 의미합니다. 이진 문자열에는 "0"과 "1"만 포함되므로 결과 문자열은 "1"로 시작하고 "0"으로 끝나거나 "0" 또는 "1"로 시작하고 끝나야 합니다. 이 문제를 해결하기 위해 문자열의 각 위치에서 접두사 "1"과 접미사 "0"을 세고 접두사 "1"과 접미사 "0"의 최대 합을 찾습니다. 문제 설명 - 바이너리 문자열 str이 제공됩니다. 주어진 문자열에서 증가하지 않는 가장 긴 부분 수열을 찾아야 합니다. 예 입력–str="010100"Output–4는 가장 긴 비재귀를 보여줍니다.

C++로 작성되어 1로 시작하는 이진 문자열의 고유 순열 수를 찾습니다. C++로 작성되어 1로 시작하는 이진 문자열의 고유 순열 수를 찾습니다. Sep 05, 2023 am 09:01 AM

주어진 문제에서는 0과 1로 구성된 문자열이 주어집니다. 1로 시작하는 모든 순열의 총 개수를 찾아야 합니다. 대답은 엄청난 숫자일 수 있으므로 모듈로 1000000007을 가져와 출력합니다. Input:str="10101001001"Output:210Input:str="101110011"Output:56 우리는 몇 가지 조합 수학을 적용하고 몇 가지 공식을 설정하여 이 문제를 해결할 것입니다. 풀이 방법 이 방법에서는 0과 1의 개수를 세어보겠습니다. 이제 n이 문자열에 나타나는 1의 수이고 m이 문자열에 나타나는 0의 수라고 가정합니다.

PHP에서 pack() 함수의 기능은 데이터를 이진 문자열로 변환하는 것입니다. PHP에서 pack() 함수의 기능은 데이터를 이진 문자열로 변환하는 것입니다. Aug 31, 2023 pm 02:05 PM

pack() 함수는 데이터를 이진 문자열로 압축합니다. 구문 pack(format,args) 매개변수 format - 사용할 형식입니다. 다음은 가능한 값입니다. - a - NUL 패딩 문자열 A - 공백 패딩 문자열 h - 16진수 문자열, 낮은 니블 먼저 H - 16진수 문자열, 높은 니블 먼저 c - 부호 있는 문자 C - 부호 없는 문자 s - 부호 있는 짧은(항상 16비트) , 머신 바이트 순서) S - unsigned short(항상 16비트, 머신 바이트 순서) n - unsigned short(항상 16비트, big endian 바이트 순서) v - unsigned short(항상 16비트, little endian 바이트 순서) i - 부호 있는 정수 (머신 크기 및 바이트 순서에 따라 다름) I - 없음 부호 있는 정수(머신 크기 및 바이트 순서에 따라 다름)

Python 프로그램: 열 사이의 행렬에서 첫 번째 요소와 마지막 요소의 위치를 ​​바꿉니다. Python 프로그램: 열 사이의 행렬에서 첫 번째 요소와 마지막 요소의 위치를 ​​바꿉니다. Sep 08, 2023 pm 04:29 PM

행렬은 행과 열로 배열된 숫자의 2차원 배열입니다. Python에는 행렬을 나타내는 데이터 유형이 없지만 중첩 목록이나 NumPy 배열을 행렬로 사용할 수 있습니다. 행렬의 첫 번째 열 요소와 마지막 열 요소를 바꾸는 방법을 보려면 다음 입력 및 출력 시나리오를 참조하세요. 입출력 시나리오 목록 목록을 사용하여 표현된 3X3 행렬이 있다고 가정합니다. 출력 행렬은 첫 번째 열 요소와 마지막 열 요소를 교체한 결과 행렬이 됩니다. 입력 행렬:[1,3,4][4,5,6][7,8,3]출력 행렬:[4,3,1][4,5,6][3,8,7]다른 것을 고려해 보겠습니다. 행과 열이 동일하지 않은 행렬입니다. 입력 매트릭스:

행과 열을 교환하여 생성할 수 있는 고유한 행렬의 수를 찾는 C++ 프로그램 행과 열을 교환하여 생성할 수 있는 고유한 행렬의 수를 찾는 C++ 프로그램 Sep 01, 2023 am 11:53 AM

nxn 행렬이 있다고 가정합니다. 행렬의 각 요소는 고유하며 1에서 n2 사이의 정수입니다. 이제 우리는 원하는 수와 순서로 다음 작업을 수행할 수 있습니다. 행렬에서 임의의 두 정수 x와 y를 선택합니다. 여기서 (1≤x

이진 문자열에서 동일하지 않은 문자가 있는 인덱스의 문자 쌍을 교환하여 문자열이 회문 문자열을 형성할 수 있는지 확인합니다. 이진 문자열에서 동일하지 않은 문자가 있는 인덱스의 문자 쌍을 교환하여 문자열이 회문 문자열을 형성할 수 있는지 확인합니다. Sep 02, 2023 pm 08:09 PM

문제 설명 문자열 str과 이진 문자열 B가 있습니다. 두 문자열의 길이는 N과 같습니다. 문자열 B에서 동일하지 않은 문자를 포함하는 인덱스 쌍에서 해당 문자를 여러 번 교환하여 문자열 str을 회문 문자열로 만들 수 있는지 확인해야 합니다. 예 예 입력 str='AAS' B='101' 출력 'YES' 설명의 중국어 번역은 다음과 같습니다. 설명 B[1]과 B[2]가 동일하지 않기 때문에 str[1]과 str[2]를 교환할 수 있습니다. . 최종 문자열은 'ASA'일 수 있습니다. str='AASS' B='1111'을 입력하고 'No'를 출력합니다. 설명의 중국어 번역은 다음과 같습니다. 문자열 회문을 만들 수 없다는 설명,

주어진 바이너리 문자열에서 동일한 길이의 부분 문자열을 선택하여 주어진 기능을 최대화하십시오. 주어진 바이너리 문자열에서 동일한 길이의 부분 문자열을 선택하여 주어진 기능을 최대화하십시오. Aug 28, 2023 am 09:49 AM

동일한 길이의 두 이진 문자열 str1과 str2가 주어지면 주어진 동일한 길이의 문자열에서 부분 문자열을 선택하여 주어진 함수 값을 최대화해야 합니다. 주어진 함수는 다음과 같습니다 - fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2)). 여기서 len(substring)은 첫 번째 부분 문자열의 길이이고 xor(sub1,sub2)는 주어진 부분 문자열의 XOR입니다. 이는 이진 문자열이므로 가능합니다. 예:Input1:stringstr1=10110&stringstr2=11101Output:3은 다음을 보여줍니다.

See all articles