原题:
![](https://i-blog.csdnimg.cn/blog_migrate/f328f16136fb0be64817149dbfba8893.png)
思路:
主要统计字符串 s 和字符串 t 对应下标 i 的字符差值 diff = ( t[i] - s[i] + 26 ) % 26,我们可以用一个一维数组 array 来记录每个 diff (范围为0~25)的上一个值 diff'(未加入前等于 array[diff])。
初始化array为全为0的数组,以标记array是否加入过元素diff。
循环同步遍历字符串 s 和字符串 t,第一次遇到 diff时加入 array[diff],使其为diff,否则为 diff' + 26 。接着判断该值是否超过k的范围,超过即不满足题意,返回 false。
注意:上述方法都是在字符串 s 和 t 长度相等的情况下进行的。
代码:
bool canConvertString(char * s, char * t, int k){
int len1 = strlen(s), len2 = strlen(t);
if(len1 != len2) return false;
int * array = malloc(sizeof(int) * 26);
memset(array, 0, sizeof(int) * 26);
for(int i = 0; i < len1; i++){
int diff = (t[i] - s[i] + 26) % 26;
if(array[diff] == 0) array[diff] = diff;
else array[diff] += 26;
if(array[diff] > k){
free(array);
return false;
}
}
free(array);
return true;
}