字符串问题

算法:字符串问题

字符串反转

1、问题描述:问题描述:给定一个字符串,将字符串前面若干个字符移动到字符串尾部
例: "abcdef"---->"defabc"

func stringRotation(s string, index int) string {
    if index > len(s) {
        return "error:index超出长度"
    }
    sb := []byte(s)
    //截取两部分,temp暂存前半部分,即将旋转到后半部分位置
    temp := sb[:index]
    //sb切割掉前半部分,重新赋值为后半部分
    sb = sb[index:]
    //将前半部分的值,正序追加到sb尾部
    for i := 0; i < index; i++ {
        sb = append(sb, temp[i])
    }
    return string(sb)

}

单词翻转

问题描述:翻转单词的顺序
例:I am a student 翻转 student a am I


func wordRotation(s string, index int) string {
    if index > len(s) {
        return "error:index超出长度"
    }
    sb := []byte(s)
    //截取两部分,temp暂存前半部分,即将旋转到后半部分位置
    temp := sb[:index]
    //sb切割掉前半部分,重新赋值为后半部分
    sb = sb[index:]
    //倒序追加到sb尾部
    for i := index-1; i >=0; i-- {
        sb = append(sb, temp[i])
    }
    return string(sb)

}

字符串包含

问题描述:两个字符串a,b,判断字符串b中的字符是否在a中全部出现

思路:

  • 暴力轮询法
  • 排序后轮询
  • 素数相乘法(注意数值越界)
  • 散列表map
  • 位运算法
//将a转换成26位的二进制数表示,然后分别和b中的每个字符的二进制数相与,等于0代表不包含,不等于0代表包含
//位运算法
func stringContain(a, b string) bool {
    flag := 0

    for i := 0; i < len(a); i++ {
        flag |= 1 << (a[i] - 'A')

    }
    for i := 0; i < len(b); i++ {
        if flag&(1<<(b[i]-'A')) == 0 {
            return false
        }
    }
    return true
}

你可能感兴趣的:(字符串问题)