Program to find out the total number of characters to be changed to fix a misspelled word in Python

This problem involves finding the minimum number of character changes needed to correct misspelled city names in a tour route. Given a list of cities that a bus visits in order and a list of one-way roads connecting cities, we need to find valid paths and calculate the minimum corrections required.

Problem Understanding

The algorithm uses dynamic programming to find the optimal path through valid roads while minimizing character differences between the given city names and actual city names.

Algorithm Steps

The solution follows these key steps ?

  • Create a helper function to calculate character differences between two strings
  • Initialize costs for all possible starting cities (road sources)
  • For each subsequent city in the tour, calculate minimum cost to reach each destination
  • Return the minimum final cost

Implementation

def diff(a, b):
    """Calculate the number of different characters between two strings"""
    return sum(x != y for x, y in zip(a, b))

def solve(cities, roads):
    """Find minimum character changes to fix misspelled city names"""
    size = len(cities)
    arr = dict()
    
    # Get all possible starting cities (sources in roads)
    junctions = set(r[0] for r in roads)
    
    # Initialize costs for the first city
    for j in junctions:
        arr[j] = diff(cities[0], j)
    
    # Process each subsequent city
    for i in range(1, size):
        nxt = dict()
        for r1, r2 in roads:
            if r1 in arr:
                cost = arr[r1] + diff(cities[i], r2)
                if r2 not in nxt or cost < nxt[r2]:
                    nxt[r2] = cost
        arr = nxt
    
    return min(arr.values())

# Test the function
cities = ["HWH", "DLI", "BGL"]
roads = [["HWH", "DLI"], ["DLI", "BCT"], ["BCT", "HWH"]]
result = solve(cities, roads)
print(f"Minimum character changes needed: {result}")
Minimum character changes needed: 2

How It Works

Let's trace through the example ?

def trace_solution():
    cities = ["HWH", "DLI", "BGL"]
    roads = [["HWH", "DLI"], ["DLI", "BCT"], ["BCT", "HWH"]]
    
    print("Cities to visit:", cities)
    print("Available roads:", roads)
    print()
    
    # Step 1: Find character differences
    print("Character differences:")
    print(f"'HWH' vs 'HWH': {sum(x != y for x, y in zip('HWH', 'HWH'))}")
    print(f"'DLI' vs 'DLI': {sum(x != y for x, y in zip('DLI', 'DLI'))}")
    print(f"'BGL' vs 'BCT': {sum(x != y for x, y in zip('BGL', 'BCT'))}")
    print()
    
    print("The misspelled city 'BGL' should be 'BCT'")
    print("Changes needed: B?B (0), G?C (1), L?T (1)")
    print("Total changes: 2")

trace_solution()
Cities to visit: ['HWH', 'DLI', 'BGL']
Available roads: [['HWH', 'DLI'], ['DLI', 'BCT'], ['BCT', 'HWH']]

Character differences:
'HWH' vs 'HWH': 0
'DLI' vs 'DLI': 0
'BGL' vs 'BCT': 2

The misspelled city 'BGL' should be 'BCT'
Changes needed: B?B (0), G?C (1), L?T (1)
Total changes: 2

Key Points

  • The algorithm uses dynamic programming to find the optimal path
  • Character differences are calculated using the Hamming distance approach
  • Only valid roads (connections) are considered in the solution
  • The function returns the minimum total character changes needed

Conclusion

This solution efficiently finds the minimum character changes needed to correct misspelled city names while respecting the road connections. The dynamic programming approach ensures optimal results by considering all possible valid paths through the city network.

Updated on: 2026-03-26T17:41:52+05:30

235 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements