package main
import("fmt""strings")funcLengthString(s string)int{
start :=0
end :=0for i :=0; i <len(s); i++{
index := strings.Index(s[start:i],string(s[i]))if index ==-1&&(i+1)> end {
end = i +1}else{
start += index +1
end += index +1}}return end-start
}funcmain(){
s :="fa21eeee3456789eeeee"
slen :=LengthString(s)
fmt.Println(slen)}
go实现快排
package main
import("fmt")// 快速排序// 说明// 1 left 表示数组左边的下标// 2 right 表示数组右边的下标// 3 array 表示要排序的数组funcQuickSort(left int, right int, array *[9]int){
l := left
r := right
// pivot 是中轴, 支点
pivot := array[(left+right)/2]
temp :=0// for 循环的目标是将比 pivot 小的数放到左边,比 pivot 大的数放到右边for l < r {// 从 pivot 的左边找到大于等于pivot的值for array[l]< pivot {
l++}// 从 pivot 的右边边找到小于等于pivot的值for array[r]> pivot {
r--}// 1 >= r 表明本次分解任务完成, breakif l >= r {break}// 交换
temp = array[l]
array[l]= array[r]
array[r]= temp
// 优化if array[l]== pivot {
r--}if array[r]== pivot {
l++}}// 如果 1== r, 再移动下if l == r {
l++
r--}// 向左递归if left < r {QuickSort(left, r, array)}// 向右递归if right > l {QuickSort(l, right, array)}}funcmain(){
arr :=[9]int{-9,78,0,23,-567,70,123,90,-23}// 调用快速排序QuickSort(0,len(arr)-1,&arr)
fmt.Println(arr)}
用go实现反转链表
package main
type ListNode struct{
Val int
Next *ListNode
}funcreverseList(head *ListNode)*ListNode {
cur := head
var pre *ListNode =nilfor cur !=nil{
pre, cur, cur.Next = cur, cur.Next, pre
}return pre
}
package main
import("fmt""unsafe")type A struct{
a int32
b int64
c int32}type B struct{
a int32
b int32
c int64}funcmain(){
fmt.Println(unsafe.Sizeof(A{}))// 24
fmt.Println(unsafe.Sizeof(B{}))// 16}
翻转字符串
package main
import("fmt")// 翻转字符串,可能包含有中文 数字 英文 要求翻转原有字符串 不创建新的存储空间funcreverse(str string)string{
s :=[]rune(str)for i,j :=0,len(s)-1; i < j; i,j = i+1, j-1{
s[i], s[j]= s[j], s[i]}returnstring(s)}funcmain(){
fmt.Println(reverse("白小黑45er"))}