PracHub
QuestionsCoachesLearningGuidesInterview Prep

Quick Overview

This question evaluates a candidate's ability to combine greedy pairing logic with efficient string traversal to minimize edits across multiple palindrome-constrained segments. It tests string manipulation and algorithmic optimization skills, since a naive per-block approach fails to scale on large inputs. This type of coding problem is commonly used to assess practical application of linear-time algorithm design under strict performance constraints.

  • medium
  • Ramp
  • Coding & Algorithms
  • Software Engineer

Minimum Character Changes to Make Every k-Length Block a Palindrome

Company: Ramp

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Take-home Project

## Minimum Character Changes to Make Every k-Length Block a Palindrome You are given a `password` string and an integer `k`. The length of `password` is guaranteed to be a multiple of `k`. Partition `password` into consecutive, non-overlapping blocks of exactly `k` characters: the first block is characters `0..k-1`, the second block is characters `k..2k-1`, and so on. The new password is **valid** when **every block is a palindrome**. In one operation you may replace a single character of `password` with any lowercase English letter. Return the **minimum number of replacements** needed so that every `k`-length block becomes a palindrome. ### Input - A string `password` consisting of lowercase English letters (`'a'`–`'z'`). - An integer `k` — the block size. `len(password)` is divisible by `k`. ### Output - A single integer: the minimum number of character replacements required. ### Constraints - `1 <= k <= len(password) <= 200000` - `len(password) % k == 0` - `password` contains only lowercase English letters. - Test data includes large inputs, so an efficient near-linear, $O(\text{len}(password))$ solution is expected; per-block string rebuilding or quadratic scanning will time out. ### Definitions - A string is a **palindrome** if it reads the same forwards and backwards. For a block `b` of length `k`, this means `b[j] == b[k-1-j]` for every `j` in `0 <= j < k/2`. The middle character (when `k` is odd) is unconstrained. ### Example 1 ``` password = "abca" k = 2 Output: 2 ``` Explanation: Blocks are `"ab"` and `"ca"`. `"ab"` needs `a == b` — one mismatched pair, so 1 change. `"ca"` needs `c == a` — one mismatched pair, so 1 change. Total `2`. ### Example 2 ``` password = "aabb" k = 2 Output: 0 ``` Explanation: Blocks are `"aa"` and `"bb"`, both already palindromes. No changes needed. ### Example 3 ``` password = "abxyba" k = 6 Output: 1 ``` Explanation: There is a single block `"abxyba"`. The mirror pairs are `(a, a)`, `(b, b)`, and `(x, y)`. Only `(x, y)` mismatches, so exactly `1` replacement is needed (e.g., change `y` to `x`).

Quick Answer: This question evaluates a candidate's ability to combine greedy pairing logic with efficient string traversal to minimize edits across multiple palindrome-constrained segments. It tests string manipulation and algorithmic optimization skills, since a naive per-block approach fails to scale on large inputs. This type of coding problem is commonly used to assess practical application of linear-time algorithm design under strict performance constraints.

You are given a string `password` and an integer `k`, where `len(password)` is a multiple of `k`. Partition `password` into consecutive, non-overlapping blocks of exactly `k` characters (characters `0..k-1`, `k..2k-1`, and so on). In one operation you may replace a single character with any lowercase English letter. Return the minimum number of replacements needed so that every `k`-length block becomes a palindrome. A block `b` of length `k` is a palindrome when `b[j] == b[k-1-j]` for every `j` in `0 <= j < k/2`; the middle character (when `k` is odd) is unconstrained. For each block, count one required change per mismatched mirror pair, then sum over all blocks. Examples: - `password = "abca", k = 2` -> `2` (blocks "ab" and "ca", each needs 1 change). - `password = "aabb", k = 2` -> `0` (blocks "aa" and "bb" already palindromes). - `password = "abxyba", k = 6` -> `1` (only the (x, y) mirror pair mismatches).

Constraints

  • 1 <= k <= len(password) <= 200000
  • len(password) % k == 0
  • password contains only lowercase English letters ('a'-'z')
  • An efficient near-linear O(len(password)) solution is expected; per-block string rebuilding or quadratic scanning will time out.

Examples

Input: ("abca", 2)

Expected Output: 2

Explanation: Blocks "ab" and "ca"; each has one mismatched mirror pair, so 1 + 1 = 2.

Input: ("aabb", 2)

Expected Output: 0

Explanation: Blocks "aa" and "bb" are already palindromes, so no changes are needed.

Input: ("abxyba", 6)

Expected Output: 1

Explanation: Single block "abxyba"; pairs (a,a) and (b,b) match, only (x,y) mismatches -> 1 change.

Input: ("a", 1)

Expected Output: 0

Explanation: k=1 blocks have no mirror pairs (a single character is trivially a palindrome), so 0 changes.

Input: ("abcd", 4)

Expected Output: 2

Explanation: One block "abcd"; mirror pairs (a,d) and (b,c) both mismatch -> 2 changes.

Input: ("aaaa", 1)

Expected Output: 0

Explanation: Every block has length 1 and is already a palindrome, so 0 changes.

Input: ("xy", 2)

Expected Output: 1

Explanation: Single block "xy"; the pair (x,y) mismatches -> 1 change.

Input: ("abcabc", 3)

Expected Output: 2

Explanation: Two blocks "abc"; in each, mirror pair (a,c) mismatches while the middle 'b' is free -> 1 + 1 = 2.

Hints

  1. Process the string block by block using a step of k over the start index; you never need to build a separate substring.
  2. Within each block, only mirror pairs (i, k-1-i) matter. Walk two pointers from the block's ends toward the middle.
  3. Each mismatched mirror pair costs exactly one replacement (change one side to match the other). The middle character of an odd-length block is free.
  4. Sum the mismatch counts across all blocks. This is a single linear pass, so it handles the largest inputs comfortably.
Last updated: Jul 1, 2026

Loading coding console...

PracHub

Master your tech interviews with 8,000+ real questions from top companies.

Product

  • Questions
  • Learning Tracks
  • Interview Guides
  • Resources
  • Premium
  • For Universities
  • Student Access

Browse

  • By Company
  • By Role
  • By Category
  • Topic Hubs
  • SQL Questions
  • AI Coding Questions
  • Compare Platforms
  • Discord Community

Support

  • support@prachub.com
  • (916) 541-4762

Legal

  • Privacy Policy
  • Terms of Service
  • About Us

© 2026 PracHub. All rights reserved.

Related Coding Questions

  • Find User Airport at a Time - Ramp (medium)
  • Find an Exit in a URL Maze - Ramp (medium)
  • Maximize Earnings by Converting Days Off into Workdays - Ramp (medium)
  • Maximum Profit from Dated Stock Trade Records - Ramp (medium)
  • Implement a multi-level digital recipe manager - Ramp (medium)