Leetcode Note: Go - Repeated Substring Pattern

Repeated Substring Pattern - LeetCode
https://leetcode.com/problems/repeated-substring-pattern/

  • Go 言語で取り組んだメモ

所感

  • string s が特定文字列の繰り返しである場合 true, そうでない場合 false を return する

回答

golang simple 100% - LeetCode Discuss
https://leetcode.com/problems/repeated-substring-pattern/discuss/572476/golang-simple-100

func repeatedSubstringPattern(s string) bool {
	search:
	for i := 1; i <= len(s)/2; i++ {
		for j := i; j+i <= len(s); j += i {
			if s[j-i:j] != s[j:j+i] {
				continue search
			}
		}
		return len(s)%i == 0
	}
	return false
}
  • search: というのを for loop で使っているけど、これなに?
    • ラベルというステートメントらしい
  • 1st for loop
    • i := 1; i <= len(s)/2; i++ でループ
  • 2nd for loop
    • j := i; j+i <= len(s); j += i でループ
      • j は i でスタート
      • j + i が len(s) 以下の間ループ
      • カウント毎に j += i を行う
    • if s[j-i:j] != s[j:j+i]
      • j を起点として j-i:jj:j+i のレンジを比較
      • 内容が異なる場合 continue で return 処理をスキップ
      • 内容が同じ場合 return len(s) % i == 0
        • len(s) を i (繰り返しを発見した文字列の長さ) で割り切れたら return true
        • 割り切れなかったら特定文字列の繰り返しではないため

Label scopes
https://go.dev/ref/spec#Label_scopes

Labeled statements
https://go.dev/ref/spec#Labeled_statements