467.unique-substrings-in-wraparound-string.go 384 B

123456789101112131415161718192021222324
  1. func findSubstringInWraproundString(p string) (cnt int) {
  2. n := len(p)
  3. if n == 0 {
  4. return
  5. }
  6. dp := make([]int, 256)
  7. runes := []rune(p)
  8. l := 1
  9. dp[runes[0]] = 1
  10. for i := 1; i < n; i++ {
  11. if runes[i] != rune((runes[i-1]-'a'+1)%26+'a') {
  12. l = 1
  13. } else {
  14. l++
  15. }
  16. if dp[runes[i]] < l {
  17. dp[runes[i]] = l
  18. }
  19. }
  20. for i := 'a'; i <= 'z'; i++ {
  21. cnt += dp[i]
  22. }
  23. return
  24. }