算法心得:替换后的最长重复字符

题目:

424. 替换后的最长重复字符

给你一个字符串 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。

这种转换通常用于将字符映射到数组索引,以在数组中执行相关的操作,比如在该代码中用于记录每个字母的频率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值