Skip to content

S1Q2 · Remove Second and Second-Last Character

⚡ Quick Reference

Function: remove_second_and_second_last(s: str) -> str

Core idea: keep the first character, skip index 1, keep the middle, skip the second-last, keep the last.

def remove_second_and_second_last(s: str) -> str:
    return s[0] + s[2:-2] + s[-1]

Key rules: - Remove index 1 (second character) and index len(s)-2 (second-last character) - s[0] → first char | s[2:-2] → middle | s[-1] → last char - Guaranteed at least 4 characters - no edge case guard needed


Problem Statement

Problem

Write a function remove_second_and_second_last(s) that removes the character at index 1 and the character at index len(s)-2 from the string.

Examples:

Input
"abcdef"
Output
"acdf"
Input
"abcd"
Output
"ad"

Tracing both examples

"abcdef" (length 6):

Index:  0  1  2  3  4  5
Char:   a  b  c  d  e  f
           ↑           ↑
        remove 1    remove 4 (len-2)

s[0]   = "a"
s[2:-2] = s[2:4] = "cd"
s[-1]  = "f"
→ "a" + "cd" + "f" = "acdf" ✓

"abcd" (length 4):

Index:  0  1  2  3
Char:   a  b  c  d
           ↑  ↑
        remove 1  remove 2 (len-2)

s[0]   = "a"
s[2:-2] = s[2:2] = ""  (empty - no middle)
s[-1]  = "d"
→ "a" + "" + "d" = "ad" ✓

s[2:-2] handles the middle cleanly

For length 4: s[2:-2] = s[2:2] = "" - empty string. For length 5: s[2:-2] = s[2:3] - one character. The same formula works for any length ≥ 4 with no special cases.


Solution approaches

def remove_second_and_second_last(s: str) -> str:
    return s[0] + s[2:-2] + s[-1]
def remove_second_and_second_last(s: str) -> str:
    first  = s[0]
    middle = s[2:-2]    # everything except first, second, second-last, last
    last   = s[-1]
    return first + middle + last
def remove_second_and_second_last(s: str) -> str:
    lst = list(s)
    del lst[-2]    # remove second-last first (doesn't shift index 1)
    del lst[1]     # then remove second
    return "".join(lst)

Delete the second-last first - removing it doesn't change the index of the second character. Reverse order of deletion avoids index-shift bugs.

remove_second_and_second_last = lambda s: s[0] + s[2:-2] + s[-1]

Key takeaways

01

s[0] + s[2:-2] + s[-1] - three-part split

The string is split into four regions: index 0 (keep), index 1 (skip), indices 2 to -2 (keep), index -2 (skip), index -1 (keep). Three slice operations reconstruct the result.

02

s[2:-2] is empty for length 4 - no special case

For a 4-character string, s[2:-2] = s[2:2] = "". Concatenating an empty string does nothing. The same formula handles all lengths ≥ 4 without any if statements.

03

When deleting from a list, remove later indices first

If using the del approach, always delete the higher index first. Deleting index 1 first shifts all subsequent indices by -1, so -2 would point to a different element.