String LCM----Python题解

Let's define a multiplication operation between a string aa and a positive integer xx: a \cdot xa⋅x is the string that is a result of writing xx copies of aa one after another. For example, "abc" \cdot~2~=⋅ 2 = "abcabc", "a" \cdot~5~=⋅ 5 = "aaaaa".

A string aa is divisible by another string bb if there exists an integer xx such that b \cdot x = ab⋅x=a. For example, "abababab" is divisible by "ab", but is not divisible by "ababab" or "aa".

LCM of two strings ss and tt (defined as LCM(s, t)LCM(s,t)) is the shortest non-empty string that is divisible by both ss and tt.

You are given two strings ss and tt. Find LCM(s, t)LCM(s,t) or report that it does not exist. It can be shown that if LCM(s, t)LCM(s,t) exists, it is unique.

Input

The first line contains one integer qq (1 \le q \le 20001≤q≤2000) — the number of test cases.

Each test case consists of two lines, containing strings ss and tt (1 \le |s|, |t| \le 201≤∣s∣,∣t∣≤20). Each character in each of these strings is either 'a' or 'b'.

Output

For each test case, print LCM(s, t)LCM(s,t) if it exists; otherwise, print -1. It can be shown that if LCM(s, t)LCM(s,t) exists, it is unique.

input

3

baba

ba

aa

aaa

aba

ab

Output

baba

aaaaaa

-1

Note

In the first test case, "baba" = "baba"  ⋅ 1=⋅ 1 = "ba" ⋅ 2.

In the second test case, "aaaaaa" = "aa" ⋅ 3 = "aaa"⋅ 2.

 这道题的大意是,输入求出两个字符串整除的最短的非空串。比如baba,ba两个字符串的整除最短非空串baba,跟我们的求最小公倍数相似

  题解:使用python math库的gcd求出最大公约数,使用另一个字符串的字符数除这个最大公约数,得到的一个新的字符串,重复操作另一个字符串。得到的两个字符串相同的话,就是我们想要的两个字符串整除的最短的非空串。不同的话输出-1。

import math
n=int(input())
for i in range(n):
    num1=input()
    num2=input()
    gcd1=math.gcd(len(num1),len(num2)) #最大公约数
    num11=num1*(len(num2)//gcd1) #新的字符串
    num22=num2*(len(num1)//gcd1) #新的字符串
    if num11==num22:
        print(num11)
    else:
        print(-1)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还年轻、、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值