想实现字符串的大小定排列组合

1. 运行环境

Go 1.18

2. 问题描述?

str := “Aa中”
str是一个中英文字符串,想将str字符串转换成大小写排列组合

3. 您期望得到的结果?

“Aa中”, “aA中”, “aa中”, “AA中”

```

4. 您实际得到的结果?

在实际处理过程中文字符全乱码了

讨论数量: 6
package main

import (
    "fmt"
    "unicode"
)

func mixCase(str string) []string {
    var result []string
    for i, char := range str {
        if unicode.IsLetter(char) {
            lower := string(unicode.ToLower(char))
            upper := string(unicode.ToUpper(char))
            if i%2 == 0 {
                result = append(result, lower+str[i+1:])
                result = append(result, upper+str[i+1:])
            } else {
                result = append(result, str[:i]+upper+str[i+1:])
                result = append(result, str[:i]+lower+str[i+1:])
            }
        } else {
            result = append(result, string(char))
        }
    }
    return result
}

func main() {
    str := "Aa 中"
    result := mixCase(str)
    for _, s := range result {
        fmt.Println(s)
    }
}
1年前 评论
package main

import "fmt"

func main() {
    str := []rune("Aa 中")
    var res []string
    var f func(int, string)
    f = func(i int, r string) {
        if i == len(str) {
            res = append(res, r)
            return
        }
        f(i+1, r+string(str[i]))
        if str[i] >= 'A' && str[i] <= 'Z' {
            f(i+1, r+string(str[i]+32))
        } else if str[i] >= 'a' && str[i] <= 'z' {
            f(i+1, r+string(str[i]-32))
        }
    }
    f(0, "")
    fmt.Println(res)
}
1年前 评论

我自己也写了一个,参考下还有优化空间没

package main

import "fmt"

var result []string

func main() {

    monogram([]rune("中aB"), 0, "")
    fmt.Println(result)
}

func monogram(s []rune, index int, temp string) []string {
    if index >= len(s) {
        result = append(result, temp)
        return result
    }
    monogram(s, index+1, temp+string(s[index]))
    if s[index] >= 'a' && s[index] <= 'z' {
        result = monogram(s, index+1, temp+string(s[index]-32))
    } else if s[index] >= 'A' && s[index] <= 'Z' {
        result = monogram(s, index+1, temp+string(s[index]+32))
    }
    return result
}
1年前 评论
Breezess 1年前
neo88948 (作者) (楼主) 1年前
renxiaotu 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!