66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
// Source : https://leetcode.com/problems/count-number-of-homogenous-substrings/
|
|
// Author : Hao Chen
|
|
// Date : 2021-02-14
|
|
|
|
/*****************************************************************************************************
|
|
*
|
|
* Given a string s, return the number of homogenous substrings of s. Since the answer may be too
|
|
* large, return it modulo 109 + 7.
|
|
*
|
|
* A string is homogenous if all the characters of the string are the same.
|
|
*
|
|
* A substring is a contiguous sequence of characters within a string.
|
|
*
|
|
* Example 1:
|
|
*
|
|
* Input: s = "abbcccaa"
|
|
* Output: 13
|
|
* Explanation: The homogenous substrings are listed as below:
|
|
* "a" appears 3 times.
|
|
* "aa" appears 1 time.
|
|
* "b" appears 2 times.
|
|
* "bb" appears 1 time.
|
|
* "c" appears 3 times.
|
|
* "cc" appears 2 times.
|
|
* "ccc" appears 1 time.
|
|
* 3 + 1 + 2 + 1 + 3 + 2 + 1 = 13.
|
|
*
|
|
* Example 2:
|
|
*
|
|
* Input: s = "xy"
|
|
* Output: 2
|
|
* Explanation: The homogenous substrings are "x" and "y".
|
|
*
|
|
* Example 3:
|
|
*
|
|
* Input: s = "zzzzz"
|
|
* Output: 15
|
|
*
|
|
* Constraints:
|
|
*
|
|
* 1 <= s.length <= 105
|
|
* s consists of lowercase letters.
|
|
******************************************************************************************************/
|
|
|
|
class Solution {
|
|
public:
|
|
int countHomogenous(string s) {
|
|
long long result = 0;
|
|
char current = '\0';
|
|
long long len = 0;
|
|
for(int i = 0; i < s.size() ; i++) {
|
|
if (current != s[i] ){
|
|
//sum from 1 to len
|
|
result += len * (len+1)/2;
|
|
current = s[i];
|
|
len = 1;
|
|
}else{
|
|
len++;
|
|
}
|
|
}
|
|
//the rest string
|
|
result += len * (len+1)/2;
|
|
return result % 1000000007;
|
|
}
|
|
};
|