https://leetcode.com/problems/unique-substrings-in-wraparound-string/
a~z까지 붙인 무한한 문자열을 기준으로 주어진 문자열에 대해 unique한 하위 문자열 개수 반환
알파벳 별로 count 세는 배열 만든 후 wraparound되고 있는 문자열에 대해서는 maxLength를 센다. 이 maxLength와 현재까지 가지고 있었던 count의 최대를 갱신하는 식으로 모든 s를 다 본 후 전체 count 배열을 합하면 unique한 하위 문자열 개수를 구할 수 있다.
public class Solution {
public int FindSubstringInWraproundString(string s) {
int[] count = new int[26];
int maxLength = 0;
int result = 0;
for (int i = 0; i < s.Length; i++)
{
if (i > 0 && (s[i] - s[i-1] == 1 || s[i-1] - s[i] == 25)) maxLength++; // wraparound 되는 문자열이면 최대 길이 ++
else maxLength = 1;
count[s[i]-'a'] = Math.Max(count[s[i]-'a'], maxLength);
}
for (int i = 0; i < 26; i++)
{
result += count[i];
}
return result;
}
}