day6 力扣公共前缀--go实现---对字符串的一些思考

今日份知识:

curl -x 指定方法名  请求的url -d  请求体body里面的内容 //curl命令
curl -x Get 127.0.0.1:8080/add/user -d jinli

curl如果不指定方法,默认使用get方法,在go里面,get方法到底可以不可以把内容数据写在body里面传递呢

其实是可以的,通常如果我们使用get方法,都是把参数写在url里面,是否支持这个需要看具体的浏览器是否支持,例如google好像就不支持,但是自己写个webui,然后使用curl -x Get去获取body的话是可以获取到的,

但是RFC7231不鼓励这样的方式,所以这样的方式还是有可能读不到的

get方法是幂等性的,post不是幂等的

今日份力扣:14 最长前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。

提示:

1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成

今日份思考:使用go实现

字符串和数组其实很像,字符串在go里面一旦定义就无法更改,所以我们想改变字符串,就要拼接,替换等操作,那么也就会出现很多已经写好的api,比如go可以使用+号连接,可以使用fmt.Sprintf,可以使用strings里面的aip,可以使用buffer.strings等函数,

func commentPerf(str []string) string {
   
	if str == nil || len(str) == 0 {
   
		return ""
	}
	temp := ""
	for i := 0; i < len(str[0]); i++ {
   
		for j := 1; j < len(str); j++ {
   
			if i >= len(str[j]) || str[j][i] != str[0][i] {
   
				return temp
			}
		}
		temp = temp + string(str[0][i])
	}
	return temp
}

下面是go实现具体demo

+:会对字符串进行遍历,计算并开辟一个新的空间来存储原来的两个字符串。

```go
func main() {
   
	a := "nihao"
	b := "hello"
	fmt.Println(a + b)
}

Sprintf:必须要用反射获取值,因此有性能损耗

func main() {
   
	a := "nihao"
	b := "hello"
	c := fmt.Sprintf("%s,%s", a, b)
	fmt.Println(c)
}

strings.Builder:里面维护了一个可变的字节缓冲区,不用创建新的字符串变量,可以直接往缓冲区增加字符串、字符或字节片段,它是直接把[]byte转换为string,从而避免变量拷贝

type Builder struct {
   
    addr *Builder
    buf  []byte
}

func main() {
   
	a := "nihao"
	b := "hello"
	var bulid strings.Builder
	bulid.WriteString(a)
	bulid.WriteString(" ")
	bulid.WriteString(b)
	c := bulid.String()
	fmt.Println(c)
}

bytes.Buffer:字节缓冲器,里面存放都是byte,使用 bytes.Buffer 时,可以避免频繁地创建新的字符串变量,从而减少内存分配,也避免变量拷贝

type Buffer struct {
   
    buf      []byte
    off      int
    lastRead readOp
}

func main() {
   
	a := "nihao"
	b := "hello"
	var bytes bytes.Buffer
	bytes.WriteString(a)
	bytes.WriteString(" ")
	bytes.WriteString(b)
	c := bytes.String()
	fmt.Println(c)
}

strings.Join:自定义分隔符,适用对象[]string类型,因为我们传入切片长度固定,所以提前进行容量分配可以减少内存分配

func main() {
   
	a := []string{
   "nihao", "hello"}
	c := strings.Join(a, "+")
	fmt.Println(c)
}

相关推荐

  1. day6 公共前缀--go实现---字符串一些思考

    2023-12-22 18:22:04       42 阅读
  2. -字符串最长公共前缀

    2023-12-22 18:22:04       19 阅读
  3. 14. 最长公共前缀

    2023-12-22 18:22:04       34 阅读
  4. 2563.统计公平数目

    2023-12-22 18:22:04       9 阅读
  5. 2085.统计出现过一次公共字符串

    2023-12-22 18:22:04       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 18:22:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 18:22:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 18:22:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 18:22:04       20 阅读

热门阅读

  1. hive中array相关函数总结

    2023-12-22 18:22:04       44 阅读
  2. 自定义ORM(mybatis)源码(一)-解析config.xml

    2023-12-22 18:22:04       36 阅读
  3. Semaphore的简单使用

    2023-12-22 18:22:04       35 阅读
  4. flutter学习-day16-自定义组件

    2023-12-22 18:22:04       45 阅读
  5. P8736 [蓝桥杯 2020 国 B] 游园安排

    2023-12-22 18:22:04       31 阅读
  6. GO设计模式——21、观察者模式(行为型)

    2023-12-22 18:22:04       33 阅读
  7. 常用英文缩略词

    2023-12-22 18:22:04       41 阅读
  8. 矩阵秩的公式小结

    2023-12-22 18:22:04       36 阅读
  9. C复习-typedef相关

    2023-12-22 18:22:04       44 阅读
  10. 0.6 V LOW VOLTAGE SWING TERMINATED LOGIC (LVSTL06)

    2023-12-22 18:22:04       46 阅读
  11. golang:Excel写入mysql数据库

    2023-12-22 18:22:04       41 阅读
  12. windows 动态库和静态库 介绍

    2023-12-22 18:22:04       40 阅读