mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-25 03:11:41 +08:00
Add Biweekly 39 / weekly 215 solutions
This commit is contained in:
88
leetcode/5603/5603. Determine if Two Strings Are Close.go
Normal file
88
leetcode/5603/5603. Determine if Two Strings Are Close.go
Normal file
@ -0,0 +1,88 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"sort"
|
||||
)
|
||||
|
||||
func closeStrings(word1 string, word2 string) bool {
|
||||
if len(word1) != len(word2) {
|
||||
return false
|
||||
}
|
||||
freqWord1, freq1, freqList1, freqWord2, freq2, freqList2, flag := map[byte]int{}, []int{}, map[int][]byte{}, map[byte]int{}, []int{}, map[int][]byte{}, false
|
||||
for i := 0; i < len(word1); i++ {
|
||||
freqWord1[word1[i]]++
|
||||
}
|
||||
for i := 0; i < len(word2); i++ {
|
||||
freqWord2[word2[i]]++
|
||||
}
|
||||
freqTemp1 := map[int]int{}
|
||||
for k, v := range freqWord1 {
|
||||
freqTemp1[v]++
|
||||
if list, ok := freqList1[v]; ok {
|
||||
list = append(list, k)
|
||||
freqList1[v] = list
|
||||
} else {
|
||||
list := []byte{}
|
||||
list = append(list, k)
|
||||
freqList1[v] = list
|
||||
}
|
||||
}
|
||||
for _, v := range freqTemp1 {
|
||||
freq1 = append(freq1, v)
|
||||
}
|
||||
freqTemp2 := map[int]int{}
|
||||
for k, v := range freqWord2 {
|
||||
freqTemp2[v]++
|
||||
if list, ok := freqList2[v]; ok {
|
||||
list = append(list, k)
|
||||
freqList2[v] = list
|
||||
} else {
|
||||
list := []byte{}
|
||||
list = append(list, k)
|
||||
freqList2[v] = list
|
||||
}
|
||||
}
|
||||
for _, v := range freqTemp2 {
|
||||
freq2 = append(freq2, v)
|
||||
}
|
||||
if len(freq1) != len(freq2) {
|
||||
return false
|
||||
}
|
||||
sort.Ints(freq1)
|
||||
sort.Ints(freq2)
|
||||
for i := 0; i < len(freq1); i++ {
|
||||
if freq1[i] != freq2[i] {
|
||||
flag = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if flag == true {
|
||||
return false
|
||||
}
|
||||
flag = false
|
||||
// 频次相同,再判断字母交换是否合法存在
|
||||
for k, v := range freqWord1 {
|
||||
if list, ok := freqList2[v]; ok {
|
||||
for i := 0; i < len(list); i++ {
|
||||
if list[i] != k && list[i] != '0' {
|
||||
// 交换的字母不存在
|
||||
if _, ok := freqWord1[list[i]]; !ok {
|
||||
flag = true
|
||||
break
|
||||
} else {
|
||||
// 交换的字母存在,重置这一位,代表这一个字母被交换了,下次不用它
|
||||
list[i] = '0'
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 出现频次个数相同,但是频次不同
|
||||
flag = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if flag == true {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type question1649 struct {
|
||||
para1649
|
||||
ans1649
|
||||
}
|
||||
|
||||
// para 是参数
|
||||
// one 代表第一个参数
|
||||
type para1649 struct {
|
||||
word1 string
|
||||
word2 string
|
||||
}
|
||||
|
||||
// ans 是答案
|
||||
// one 代表第一个答案
|
||||
type ans1649 struct {
|
||||
one bool
|
||||
}
|
||||
|
||||
func Test_Problem1649(t *testing.T) {
|
||||
|
||||
qs := []question1649{
|
||||
|
||||
{
|
||||
para1649{"abc", "bca"},
|
||||
ans1649{true},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"a", "aa"},
|
||||
ans1649{false},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"cabbba", "abbccc"},
|
||||
ans1649{true},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"cabbba", "aabbss"},
|
||||
ans1649{false},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"uau", "ssx"},
|
||||
ans1649{false},
|
||||
},
|
||||
|
||||
{
|
||||
para1649{"uuukuuuukkuusuususuuuukuskuusuuusuusuuuuuuk", "kssskkskkskssskksskskksssssksskksskskksksuu"},
|
||||
ans1649{false},
|
||||
},
|
||||
}
|
||||
|
||||
fmt.Printf("------------------------Leetcode Problem 1649------------------------\n")
|
||||
|
||||
for _, q := range qs {
|
||||
_, p := q.ans1649, q.para1649
|
||||
fmt.Printf("【input】:%v 【output】:%v \n", p, closeStrings(p.word1, p.word2))
|
||||
}
|
||||
fmt.Printf("\n\n\n")
|
||||
}
|
Reference in New Issue
Block a user