题目描述
给定两个长度相等的,由小写字母组成的字符串S1和S2,定义S1和S2的距离为两个字符串有多少个位置上的字母不相等。
现在牛牛可以选定两个字母X1和X2,将S1中的所有字母X1均替换成X2。(X1和X2可以相同)
牛牛希望知道执行一次替换之后,两个字符串的距离最少为多少。
示例1
输入
复制
"aaa","bbb"
输出
复制
0
说明
牛牛可以将S1中的字符'a'全部替换成字符'b',这样S1就变成了"bbb",那么S1和S2的距离就是0
示例2
输入
复制
"aabb","cdef"
输出
复制
3
说明
一种可行的方案是将S1中的字符'a'全部替换成字符'c',那么S1变成了"ccbb",和S2的距离是3
备注:
S1.size() =S2.size()S1.size()=S2.size()
1 \leq S1.size() \leq 5 * 10^41≤S1.size()≤5∗104
S1和S2中的字母均为小写字母
解题思路:
因为输入的字符串为26个小写字母组成,主要步骤是将S1中的字符a全部换成b然后求S1与S2的"字符串距离",可以维护一个二维数组,map[i][j],其中i代表S1中的字符,j代表S2中的字符,遍历map求出由i替换成j后获取的最大价值
AC代码:
public int GetMinDistance (String S1, String S2) {
int[][] map=new int[26][26];
int diff=0;
for(int i=0;i<S1.length();i++){
int a=S1.charAt(i)-'a';
int b=S2.charAt(i)-'a';
map[a][b]++;
diff+=a!=b?1:0;
}
int minn=Integer.MAX_VALUE;
for(int i=0;i<26;i++){
for(int j=0;j<26;j++){
minn=Math.min(minn,diff+map[i][i]-map[i][j]);
}
}
return minn;
}