算法:字符串问题
字符串反转
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
}
网友评论