#D1023. # 编辑距离

# 编辑距离

题目背景

给一个字符串,为字符设置一个排序,即为每个字符分配一个位置编号 pospos,使得所有字符串中相邻两个字符的距离之和最小?

题目描述

您有一个经常输入的密码,一个长度为 nn 的字符串 ss 。该字符串的每个字符都是前 mm 个小写字符之一。

由于您花了大量时间输入密码,因此您想买一个新键盘。键盘是前 mm 个小写字母的排列组合。

由于您只用一根手指输入密码,因此您需要花费时间将手指从一个密码字符移动到下一个字符。从字符 sis_i 移动到字符 si+1s_{i+1} 的时间等于这些字符在键盘上的距离。使用键盘输入密码所需的总时间称为该键盘的编辑距离。

假设字符 cc 在键盘上的位置为 poscpos_c ,则键盘的编辑距离为 i=1n1possipossi+1\sum_{i=1}^{n-1} |pos_{s_i}-pos_{s_{i+1}}|

你需要购买对于你的密码来说编辑距离最小的一款键盘。

输入格式

第一行输入两个整数 nnmm (1n105,1m20)( 1\le n\le 10^5,1\le m\le 20 )

第二行包含由 nn 个字符组成的字符串 ss 。每个字符都是前 mm 个小写字母之一。

输出格式

输出一个整数表示最小的编辑距离。

输入输出样例 #1

输入 #1

6 3
aacabc

输出 #1

5

输入输出样例 #2

输入 #2

15 4
abacabadabacaba

输出 #2

16

说明/提示

对于 30%30 \% 的数据:1n100,1m91\le n\le 100,1\le m\le 9

对于 60%60 \% 的数据:1n105,1m91\le n\le 10^5,1\le m\le 9

对于 100%100 \% 的数据:1n105,1m201\le n\le 10^5,1\le m\le 20