目录
335. 路径交叉 Self-crossing 🌟🌟🌟
336. 回文对 Palindrome Pairs 🌟🌟🌟
🌟 每日一练刷题专栏 🌟
Rust每日一练 专栏
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
335. 路径交叉 Self-crossing
给你一个整数数组 distance
。
从 X-Y 平面上的点 (0,0)
开始,先向北移动 distance[0]
米,然后向西移动 distance[1]
米,向南移动 distance[2]
米,向东移动 distance[3]
米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。
判断你所经过的路径是否相交。如果相交,返回 true
;否则,返回 false
。
示例 1:
输入:distance = [2,1,1,2] 输出:true
示例 2:
输入:distance = [1,2,3,4] 输出:false
示例 3:
输入:distance = [1,1,1,1] 输出:true
提示:
1 <= distance.length <= 10^5
1 <= distance[i] <= 10^5
代码:
package mainimport "fmt"func isSelfCrossing(distance []int) bool {n := len(distance)if n <= 3 {return false}for i := 3; i < n; i++ {// 第四条边与第一条边相交if distance[i] >= distance[i-2] && distance[i-1] <= distance[i-3] {return true}// 第五条边与第一条边重叠或者相交if i >= 4 && distance[i-1] == distance[i-3] && distance[i]+distance[i-4] >= distance[i-2] {return true}// 第六条边与第一条边相交if i >= 5 && distance[i-2]-distance[i-4] >= 0 && distance[i]+distance[i-4] >= distance[i-2] && distance[i-1]-distance[i-3] >= 0 && distance[i-1]-distance[i-3] <= distance[i-5] && distance[i-2]-distance[i-4] <= distance[i-1]-distance[i-3] {return true}}return false
}func main() {distance := []int{2,1,1,2}fmt.Println(isSelfCrossing(distance ))distance = []int{1,2,3,4}fmt.Println(isSelfCrossing(distance ))distance = []int{1,1,1,1}fmt.Println(isSelfCrossing(distance ))
}
输出:
true
false
true
336. 回文对 Palindrome Pairs
给定一组 互不相同 的单词, 找出所有 不同 的索引对 (i, j)
,使得列表中的两个单词, words[i] + words[j]
,可拼接成回文串。
示例 1:
输入:words = ["abcd","dcba","lls","s","sssll"] 输出:[[0,1],[1,0],[3,2],[2,4]] 解释:可拼接成的回文串为 ["dcbaabcd","abcddcba","slls","llssssll"]
示例 2:
输入:words = ["bat","tab","cat"] 输出:[[0,1],[1,0]] 解释:可拼接成的回文串为 ["battab","tabbat"]
示例 3:
输入:words = ["a",""] 输出:[[0,1],[1,0]]
提示:
1 <= words.length <= 5000
0 <= words[i].length <= 300
words[i]
由小写英文字母组成
代码:
package mainimport "fmt"func palindromePairs(words []string) [][]int {res := [][]int{}wordIndexMap := map[string]int{}for i, word := range words {wordIndexMap[word] = i}for i, word := range words {for j := 0; j <= len(word); j++ {prefix := word[:j]suffix := word[j:]if isPalindrome(prefix) {reverseSuffix := reverseString(suffix)if idx, ok := wordIndexMap[reverseSuffix]; ok && idx != i {res = append(res, []int{idx, i})}}if isPalindrome(suffix) {reversePrefix := reverseString(prefix)if idx, ok := wordIndexMap[reversePrefix]; ok && idx != i && len(suffix) > 0 {res = append(res, []int{i, idx})}}}}return res
}func isPalindrome(s string) bool {i, j := 0, len(s)-1for i < j {if s[i] != s[j] {return false}i++j--}return true
}func reverseString(s string) string {res := ""for i := len(s) - 1; i >= 0; i-- {res += string(s[i])}return res
}func main() {words := []string{"abcd","dcba","lls","s","sssll"}fmt.Println(palindromePairs(words))words = []string{"bat","tab","cat"}fmt.Println(palindromePairs(words))words = []string{"a", ""}fmt.Println(palindromePairs(words))
}
输出:
[[1 0] [0 1] [3 2] [2 4]]
[[1 0] [0 1]]
[[0 1] [1 0]]
暴力循环:
package mainimport "fmt"func palindromePairs(words []string) [][]int {res := [][]int{}for i := 0; i < len(words); i++ {for j := i + 1; j < len(words); j++ {if isPalindrome(words[i] + words[j]) {res = append(res, []int{i, j})}if isPalindrome(words[j] + words[i]) {res = append(res, []int{j, i})}}}return res
}func isPalindrome(s string) bool {i, j := 0, len(s)-1for i < j {if s[i] != s[j] {return false}i++j--}return true
}func main() {words := []string{"abcd","dcba","lls","s","sssll"}fmt.Println(palindromePairs(words))// 输出: [[0 1] [1 0] [3 2] [2 4]]words = []string{"bat","tab","cat"}fmt.Println(palindromePairs(words))// 输出: [[0 1] [1 0]]words = []string{"a", ""}fmt.Println(palindromePairs(words))// 输出: [[0 1] [1 0]]
}
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Rust每日一练 专栏(2023.5.16~)更新中... | |
Golang每日一练 专栏(2023.3.11~)更新中... | |
Python每日一练 专栏(2023.2.18~2023.5.18)暂停更 | |
C/C++每日一练 专栏(2023.2.18~2023.5.18)暂停更 | |
Java每日一练 专栏(2023.3.11~2023.5.18)暂停更 |