每日一题 【每日一题】双胞胎字符串 -Python-20211005

Jack · 2021年10月05日 · 最后由 lework 回复于 2022年01月20日 · 58 次阅读
本帖已被设为精华帖!
  1. 问题描述: 给定两个字符串 s 和 t,每次可以任意交换 s 的奇数位或偶数位上的字符,问能否经过若干次交换,使 s 变成 t
  2. 问题示例: s = "abcd" t = "cdab" 输出: "YES"

s = "abcd" t = "bcda" 输出: "NO"

Jack 将本帖设为了精华贴 10月05日 17:38

参考代码:

class Solution:
    def isTwin(self, s, t):
        if len(s) != len(t):
            return "NO"
        oddS = []
        evenS = []
        oddT = []
        evenT = []
        for i in  range(len(s)):
            if i & 1:
                oddS.append(s[i])
                oddT.append(t[i])
            else:
                evenS.append(s[i])
                evenT.append(t[i])
        oddS.sort()
        oddT.sort()
        evenS.sort()
        evenT.sort()
        for i in range(len(oddS)):
            if oddS[i] != oddT[i]:
                return "NO"
        for i in range(len(evenS)):
            if evenS[i] != evenT[i]:
                return "NO"
        return "YES"
package main

import (
    "fmt"
    "sort"
)

func isTwin(s string, t string) string {

    var (
        oddS  []int
        evenS []int
        oddT  []int
        evenT []int
        sByte = []byte(s)
        tByte = []byte(t)
    )

    if len(sByte) != len(tByte) {
        return "No"
    }

    for i := 0; i < len(sByte); i++ {
        if i&1 == 1 {
            oddS = append(oddS, int(sByte[i]))
            oddT = append(oddT, int(tByte[i]))

        } else {
            evenS = append(evenS, int(sByte[i]))
            evenT = append(evenT, int(tByte[i]))
        }
    }

    sort.Sort(sort.IntSlice(oddS))
    sort.Sort(sort.IntSlice(oddT))
    sort.Sort(sort.IntSlice(evenS))
    sort.Sort(sort.IntSlice(evenT))

    for i := 0; i < len(oddS); i++ {
        if oddS[i] != oddT[i] {
            return "No"
        }
    }
    for i := 0; i < len(evenS); i++ {
        if evenS[i] != evenT[i] {
            return "No"
        }
    }

    return "YES"
}

func main() {
    /*
        双胞胎字符串
        问题描述: 给定两个字符串 s 和 t,每次可以任意交换 s 的奇数位或偶数位上的字符,问能否经过若干次交换,使 s 变成 t
        问题示例: s = "abcd" t = "cdab" 输出: "YES", s = "abcd" t = "bcda" 输出: "NO"
    */

    s := "abcd"
    t := "bcda"
    fmt.Println(isTwin(s, t))
}

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册