Hackerrank – Python – Mutations – Solution

Publish Date - March 8th, 2023


Last Modified - May 11th, 2023

This is a weird question, because the default data in the solutions GUI just complicates things. While you can use a python FOR Loop to traverse through all of the letters in the string, why do that when you can just do a simple concatenate. This solution had me thinking quite a bit because of the default data. However, a very useful Stackoverflow answer steered me in the right direction. I hope my answer can steer you in the right direction as well!

Table of Contents

The problem

We have seen that lists are mutable (they can be changed), and tuples are immutable (they cannot be changed).

Let’s try to understand this with an example.

You are given an immutable string, and you want to make changes to it.


>>> string = "abracadabra"

You can access an index by:

>>> print string[5]

What if you would like to assign a value?

>>> string[5] = 'k' 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

How would you approach this?

  • One solution is to convert the string to a list and then change the value.


>>> string = "abracadabra"
>>> l = list(string)
>>> l[5] = 'k'
>>> string = ''.join(l)
>>> print string
  • Another approach is to slice the string and join it back.


>>> string = string[:5] + "k" + string[6:]
>>> print string

Read a given string, change the character at a given index and then print the modified string.
Function Description

Complete the mutate_string function in the editor below.

mutate_string has the following parameters:

  • string string: the string to change
  • int position: the index to insert the character at
  • string character: the character to insert


  • string: the altered string

Input Format

The first line contains a string, string.
The next line contains an integer position, the index location and a string character, separated by a space.

Sample Input

STDIN           Function
-----           --------
abracadabra     s = 'abracadabra'
5 k             position = 5, character = 'k'

Sample Output


The solution

For this one, like I stated – don’t over think the code.

def mutate_string(string, position, character):
    # string[:position] = abrac
    # string[position:] = adabra
    # character = k
    # newstring = string[:position] + character + string[position:] = abrackadabra
    # need some way to get rid of the starting a for the last part of the concatenate

    newstring = string[:position] + character + string[position+1:]

    return newstring

if __name__ == '__main__':
    s = input()
    i, c = input().split()
    s_new = mutate_string(s, int(i), c)

After about 25 minutes on trying to loop through and string index / insert the variable, I got some help from Stackoverflow. They had a really useful function below:

def insert_dash(string, index):
    return string[:index] + '-' + string[index:]

print insert_dash("355879ACB6", 5)

You can see the similarities between the two functions (the one I wrote and the one created by Mario Cesar).

Some subtle differences are:

  • There’s one more input in way of the character
  • There isn’t an input function that you need to work with (thank god for return).

Due to there being a third variable (character), you need to find a way to remove the first letter of the third portion of the concatenate, because if you run just this:

newstring = string[:position] + character + string[position:] 

You get this:


With the string[6] being “a” (which you don’t want).

Therefore, by moving the indexing of the third string up by “+1”, you end up skipping that “a” at the end of the concatenate and you get your proper code!

While this code doesn’t really help with data science, machine learning or natural language processing – it does drive down to the fundamentals of string mutation which is important in any coding language. Whether it’s Java or JavaScript – all coding languages have string manipulation, and ensuring that your code is clean and easy to understand is important.

I hope this helps you!

Leave a Comment

Your email address will not be published. Required fields are marked *