go 算法 查询字符在字符串中的位置

Posted shiluoliming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 算法 查询字符在字符串中的位置相关的知识,希望对你有一定的参考价值。

在utf8字符串判断是否包含指定字符串,并返回下标。
"北京天安门最美丽" , "天安门"
结果:2

解答:

import (
    "fmt"
    "strings"
)

func main(){
    fmt.Println(Utf8Index("北京天安门最美丽", "天安门"))
    fmt.Println(strings.Index("北京天安门最美丽", ""))
    fmt.Println(strings.Index("", ""))
    fmt.Println(Utf8Index("12ws北京天安门最美丽", "天安门"))
}

func Utf8Index(str, substr string) int {
    asciiPos := strings.Index(str, substr)
    if asciiPos == -1 || asciiPos == 0 {
        return asciiPos
    }
    pos := 0
    totalSize := 0
    reader := strings.NewReader(str)
    for _, size, err := reader.ReadRune(); err == nil; _, size, err = reader.ReadRune() {
        totalSize += size
        pos++
        // 匹配到
        if totalSize == asciiPos {
            return pos
        }
    }
    return pos
}

 

以上是关于go 算法 查询字符在字符串中的位置的主要内容,如果未能解决你的问题,请参考以下文章

边做算法边学go语言之程序员面试金典面试题 01.06. 字符串压缩

从搜索文档中查找最小片段的算法?

根据字符串名称而不是列表视图项位置替换片段并启动活动

算法leetcode|1967. 作为子字符串出现在单词中的字符串数目(rust和go重拳出击)

算法leetcode|1967. 作为子字符串出现在单词中的字符串数目(rust和go重拳出击)

片段(Java) | 机试题+算法思路+考点+代码解析 2023