代码随想录35期Day08-字符串

由 Greyson 发布

344.反转字符串

  • 位运算
func reverseString(s []byte)  {
    l := 0
    r := len(s) - 1
    for l < r {
        s[l] ^= s[r]
        s[r] ^= s[l]
        s[l] ^= s[r]
        l++
        r--
    }
}

541. 反转字符串II

  • 没技巧
func reverseStringRange(s []byte, l int, r int) {

    if r >= len(s) {
        r = len(s) - 1
    }
    for l < r {
        s[l] ^= s[r]
        s[r] ^= s[l]
        s[l] ^= s[r]
        l++
        r--
    }
}
func reverseStr(s string, k int) string {
    res := []byte(s)
    count := 0
    for i := 0; i < len(s); i += 2 * k {
        reverseStringRange(res, i, i+k-1)
        count++
    }
    return string(res)
}

替换数字

def isNumber(c):
    return c >= '0' and c <= '9'

s = input()
res = []
for c in s:
    res.append("number" if isNumber(c) else c)
print("".join(res))

151.翻转字符串里的单词

func reverseStringArr(s []string) {
    l := 0
    r := len(s) - 1
    for l < r {
        temp := s[l]
        s[l] = s[r]
        s[r] = temp
        l++
        r--
    }
}
func reverseWords(s string) string {
    chars := []byte(s)
    temp := ""
    var resArr []string
    // 分词
    for _, char := range chars {
        if char == ' ' {
            if temp != "" {
                resArr = append(resArr, temp)
            }
            temp = ""
            continue
        }
        temp = temp + string(char)
    }
    if temp != "" {
        resArr = append(resArr, temp)
    }
    // 反转
    reverseStringArr(resArr)
    // 拼接
    res := ""
    for i, s := range resArr {
        res += s
        if i != len(resArr)-1 {
            res += " "
        }
    }
    return res
}

右旋字符串

  • SB版
n = int(input(""))
s = input("")

print(s[-n:]+s[:-n])
  • NB版

n = int(input(""))
s = input("")

r = len(s) - 1
reverse(s, 0, r-n)
reverse(s, r-n, r)
reverse(s, 0, r)
print(s[-n:]+s[:-n])


扫描二维码,在手机上阅读
收藏

0条评论

发表评论


验证码