题目:
给你一个字符串 s
和一个整数 k
。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k
次。
在执行上述操作后,返回包含相同字母的最长子字符串的长度。
以下是解法:
class Solution {
public int characterReplacement(String s, int k) {
int lenth = s.length();
int max = 0;
char[] charArray = s.toCharArray();
if(lenth < 2) return lenth;
int [] freq = new int [26];
int left = 0;
int res = 0;
for(int i = 0;i < lenth;i++){
freq[charArray[i]-'A']++;
max = Math.max(max,freq[charArray[i]-'A']);
if(max + k < i - left + 1){
freq[charArray[left]-'A']--;
left++;
}else{
res = Math.max(res,i - left + 1);
}
}
return res;
}
}
这里主要学习到一个操作,对于字符串内字母计数的小技巧
int[] freq = new int[26];//首先创建一个长度为26的整数数组,对应26的英文字母,在本题中每个位置的值对应该字母出现的次数
char[] charArray = s.toCharArray();
//把字符串s转换成字符串数组charArray
`charArray[i] - 'A'` 表达式用于将字符 `charArray[i]` 转换为一个与字母 `'A'` 相对应的整数值。这通常用于将字母映射到整数索引,以便在数组中进行字母频率的记录或其他相关操作。
freq[charArray[i]-'A']可以代表字符串s,i位置的字母所对应的一个值,这里表示为字母出现的次数
具体来说,假设 `charArray[i]` 是一个大写英文字母,例如 `'A'`、`'B'`、`'C'` 等,那么表达式 `charArray[i] - 'A'` 将计算出这个字母相对于字母 `'A'` 的偏移量。因为在大多数编码中,字母 `'A'` 的字符编码值通常比其他大写字母的编码值小,所以 `charArray[i] - 'A'` 的结果将是一个在 0 到 25 之间的整数,用于在数组中表示字母的频率或索引。
例如:
- 如果 `charArray[i]` 是 `'A'`,那么 `charArray[i] - 'A'` 的结果是 0。
- 如果 `charArray[i]` 是 `'B'`,那么 `charArray[i] - 'A'` 的结果是 1。
- 如果 `charArray[i]` 是 `'C'`,那么 `charArray[i] - 'A'` 的结果是 2。
- 以此类推,直到 `charArray[i]` 为 `'Z'` 时,`charArray[i] - 'A'` 的结果是 25。
这种转换通常用于将字符映射到数组索引,以在数组中执行相关的操作,比如在该代码中用于记录每个字母的频率。