#!/usr/bin/env bash set -e if [ $# != 2 ]; then echo Usage: "$0" string1 string2 exit 1 fi function min () { minval="$1" shift for val in "$@"; do if [ "$val" -lt "$minval" ]; then minval="$val" fi done echo "$minval" } function setval () { export "cache_$1_$2"="$3" } function getval () { varname="cache_$1_$2" echo "${!varname}" } len_first=${#1} len_second=${#2} for ((i=0; i <= len_first; i++)) do setval "$i" 0 "$i" done for ((j=0; j <= len_second; j++)) do setval 0 "$j" "$j" done for ((i=1;i<=len_first;i++)) do for ((j=1;j<=len_second;j++)) do char1="${1:$((i-1)):1}" char2="${2:$((j-1)):1}" if [ "$char1" = "$char2" ]; then adder=0 else adder=1 fi cand1=$(($(getval "$i" $((j-1)))+1)) cand2=$(($(getval $((i-1)) "$j")+1)) cand3=$(($(getval $((i-1)) $((j-1)))+adder)) setval "$i" "$j" "$(min $cand1 $cand2 $cand3)" done done getval "$len_first" "$len_second"


생각보다는 깔끔하네