-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
CountNumberOfHomogenousSubstrings.cpp
65 lines (63 loc) · 1.72 KB
/
CountNumberOfHomogenousSubstrings.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// 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;
}
};