算法前缀和之abb

package com.zhang.reflection.面试.算法模版.前缀和;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * leafee 最近爱上了 abb 型语句,比如“叠词词”、“恶心心”
 * leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列?
 * 定义: abb 型字符串满足以下条件:  (子序列不要求连续,子串要求连续)
 *
 * 字符串长度为 3 。
 * 字符串后两位相同。
 * 字符串前两位不同。
 */
public class abb {
    /**
     * 可以说是前序和感觉
     * 先计算当前往前有多少个不同组合,直到遇到下一个相同字符再累加进去
     * abcbcc
     * 就以c来说
     * 第一次c前面有ab组合两种,dp['c'-'a'] = 0;
     * 第二个c前面有abcb有三种abb三种组合 dp['c'-'a'] = 2
     * 第三个c的时候可以和第一个组合,有两种,第二组合有三种,dp['c'-'a'] = 5
     * 第一次 0种符合的组合,第二次有2种符合的组合,第三次有5种符合的组合
     * 关键要先计数,下次遇到相同的字符再累加
     * @param
     * @return
     * @author louss
     * @date 2022/4/10 17:32
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String str = br.readLine();
        long[] sum = new long[26];
        long[] dp = new long[26];
        long result = 0;
        for(int i=0;i<n;i++){
            int index = str.charAt(i)-'a';
            result += dp[index];
            dp[index] += i - sum[index];
            sum[index]++;
        }
        System.out.println(result);
    }
}

全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务