题解 | #名字串生成I# java
名字串生成I
https://www.nowcoder.com/practice/6544721abdd54f1f938f2a98ac03922a
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str1 string字符串 * @param str2 string字符串 * @return string字符串 */ public String gcdOfStrings (String str1, String str2) { // write code here if (!(str1 + str2).equals(str2 + str1)) { return ""; } int gcdLength = gcd(str1.length(), str2.length()); return str1.substring(0, gcdLength); } private int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } }
Java语言
主要考察以下知识点:
- 字符串拼接和比较
- 最大公约数
- 字符串的基本操作
代码的文字解释:
- 定义了一个名为 gcdOfStrings 的函数,接受输入参数 str1 和 str2(两个字符串)。
- 先检查两个字符串的拼接是否相等,通过将 str1 和 str2 拼接起来,然后比较拼接后的结果是否相等。如果不相等,直接返回空字符串,因为不存在满足条件的最长子串。
- 如果拼接相等,使用 gcd 函数来计算 str1 和 str2 的长度的最大公约数。这个函数采用了欧几里得算法,计算两个数的最大公约数。
- 返回 str1 的前 gcdLength 长度的子串作为最长子串,因为这是满足条件的最长公共子串。
- 代码较为简单,其实就是个欧几里得算法。