Java中如何实现长尾词统计,借鉴LeetCode 828题的子串唯一字符乘法原理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计927个文字,预计阅读时间需要4分钟。
目录 + 题目要求 + 思路:模拟 + Java + C++ + Rust 题目要求 + 思路:模拟 + 解题的核心思想在于逆向思维,不是考虑每个子数组中的唯一字符,而是考虑每个字符可以作为多少个子数组的唯一字符。
目录
- 题目要求
- 思路:模拟
- java
- C++
- Rust
题目要求
思路:模拟
解题的核心思想在于逆向思维,不考虑每个子数组中的唯一字符个数,转而考虑每个字符可以作为多少个子数组的唯一字符;
- 所以在计算答案时的算式和示例中给出的是不一样的;
- 在计算每个字符“贡献”的时候要用到乘法原理。
对每一个字符s[i]s[i]s[i]都记录其左边和右边的第一个相同字符位置,分别记为l[i]l[i]l[i]和r[i]r[i]r[i],这两个位置中间构成的就是s[i]s[i]s[i]能够作为唯一字符的最长子串,在这个最长的子串中还有若干个较短的子串,此时s[i]s[i]s[i]的“贡献”可由到左边和到右边的距离相乘计算得出。
本文共计927个文字,预计阅读时间需要4分钟。
目录 + 题目要求 + 思路:模拟 + Java + C++ + Rust 题目要求 + 思路:模拟 + 解题的核心思想在于逆向思维,不是考虑每个子数组中的唯一字符,而是考虑每个字符可以作为多少个子数组的唯一字符。
目录
- 题目要求
- 思路:模拟
- java
- C++
- Rust
题目要求
思路:模拟
解题的核心思想在于逆向思维,不考虑每个子数组中的唯一字符个数,转而考虑每个字符可以作为多少个子数组的唯一字符;
- 所以在计算答案时的算式和示例中给出的是不一样的;
- 在计算每个字符“贡献”的时候要用到乘法原理。
对每一个字符s[i]s[i]s[i]都记录其左边和右边的第一个相同字符位置,分别记为l[i]l[i]l[i]和r[i]r[i]r[i],这两个位置中间构成的就是s[i]s[i]s[i]能够作为唯一字符的最长子串,在这个最长的子串中还有若干个较短的子串,此时s[i]s[i]s[i]的“贡献”可由到左边和到右边的距离相乘计算得出。

