| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 
							- package main
 
- func minInt(nums ...int) int {
 
- 	min := nums[0]
 
- 	for i := 1; i < len(nums); i++ {
 
- 		if nums[i] < min {
 
- 			min = nums[i]
 
- 		}
 
- 	}
 
- 	return min
 
- }
 
- func nextPerm(nums []int) bool {
 
- 	n := len(nums)
 
- 	if n < 2 {
 
- 		return false
 
- 	}
 
- 	i := n - 2
 
- 	for ; 0 <= i && nums[i+1] <= nums[i]; i-- {
 
- 	}
 
- 	if i == -1 {
 
- 		return false
 
- 	}
 
- 	j := i + 1
 
- 	for ; j+1 < n && nums[i] < nums[j+1]; j++ {
 
- 	}
 
- 	nums[i], nums[j] = nums[j], nums[i]
 
- 	for l, r := i+1, n-1; l < r; l, r = l+1, r-1 {
 
- 		nums[l], nums[r] = nums[r], nums[l]
 
- 	}
 
- 	return true
 
- }
 
- func countGroup(s string, perm []int) int {
 
- 	n, k := len(s), len(perm)
 
- 	prevByte := s[perm[0]]
 
- 	cnt := 1
 
- 	for offset := 0; offset < n; offset += k {
 
- 		i := 0
 
- 		if offset == 0 {
 
- 			i = 1
 
- 		}
 
- 		for ; i < k; i++ {
 
- 			if s[offset+perm[i]] != prevByte {
 
- 				cnt++
 
- 			}
 
- 			prevByte = s[offset+perm[i]]
 
- 		}
 
- 	}
 
- 	return cnt
 
- }
 
- func slowSolution(s string, k int) (min int) {
 
- 	perm := make([]int, k)
 
- 	for i := range perm {
 
- 		perm[i] = i
 
- 	}
 
- 	min = countGroup(s, perm)
 
- 	for nextPerm(perm) {
 
- 		groupCnt := countGroup(s, perm)
 
- 		if groupCnt < min {
 
- 			min = groupCnt
 
- 		}
 
- 	}
 
- 	return
 
- }
 
 
  |