문자 배열이 주어지면 다음 알고리즘을 사용하여 압축합니다.
압축된 문자열 s는 별도로 반환되지 않고 대신 입력 문자 배열 chars에 저장됩니다. 10자 이상의 그룹 길이는 문자 단위로 여러 문자로 분할됩니다.
입력 배열 수정을 마친 후 배열의 새 길이를 반환합니다.
일정한 추가 공간만 사용하는 알고리즘을 작성해야 합니다.
이 문제를 해결하려면 현재 문자와 그 개수를 추적하면서 배열을 반복해야 합니다. 새로운 문자를 만나면 현재 문자와 해당 문자 수(1보다 큰 경우)를 배열에 추가합니다. 공간 복잡성 요구 사항을 충족하려면 이 작업을 제대로 수행해야 합니다.
무차별 대입 솔루션에는 입력 배열의 압축된 버전을 저장할 새 배열을 만드는 작업이 포함됩니다. 이는 공간 효율적이지는 않지만 관련 단계를 이해하는 데 도움이 됩니다.
function compressBruteForce(chars: string[]): number { const n = chars.length; let compressed: string[] = []; let i = 0; while (i 1) { compressed.push(...count.toString().split('')); } } for (let j = 0; j시간 복잡도 분석:
무차별 솔루션은 공간 효율적이지 않으며 일정한 추가 공간만 사용한다는 제약 조건을 충족하지 않습니다.
최적화된 솔루션에는 압축된 버전을 저장하기 위해 입력 배열을 수정하는 작업이 포함됩니다. 우리는 두 개의 포인터를 사용합니다. 하나는 입력 배열을 읽기 위한 것이고 다른 하나는 압축된 출력을 쓰기 위한 것입니다.
function compress(chars: string[]): number { let writeIndex = 0; let i = 0; while (i 1) { let countStr = count.toString(); for (let j = 0; j시간 복잡도 분석:
console.log(compressBruteForce(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compressBruteForce(["a"])); // 1, ["a"] console.log(compressBruteForce(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compressBruteForce(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compressBruteForce(["a","b","c"])); // 3, ["a","b","c"] console.log(compress(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compress(["a"])); // 1, ["a"] console.log(compress(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compress(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compress(["a","b","c"])); // 3, ["a","b","c"]
문자열 조작:
내부 알고리즘:
이러한 문제와 전략을 연습함으로써 문제 해결 능력을 향상시키고 다양한 코딩 과제에 더 잘 대비할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3