利用循环解决问题|豆包MarsCode AI刷题

55 阅读2分钟

题目描述:输入一个字符串,判断其是否完全循环,若是循环的,输出最短的循环子串,否则输入空“”。例如:输入abababab,输出ab,输入ab,则输出“”。 由此可得:输入格式为abcabcabcabc|aaa,输出格式为:abc|a(最短的循环子串)。

题目思路:1.当字符串空串时或者只有一个字符,循环不存在,直接返回空串或原字符。
2.当字符串不为空串时,题目要求循环子串,原字符最少有一个子串循环两次。

利用for循环一次得到一个模板字符串,判断它是否符合要求。
如何判断字符串是否符合要求:1.先判断原字符串的长度是否能整除模板字符串,如果不能,这个模板字符串不是循环子串。 2.从原字符串中得到和模板字符串相同长度的子串,判断子串是否和模板相等,当所有子串和模板子串相等时,就是要找的最短循环子串。如果出现一个不相等,则不是。

代码如下public class Main { public static String solution(String inp) { // 遍历所有可能的子串长度 for (int len = 1; len <= inp.length() / 2; len++) { // 提取子串 String sub = inp.substring(0, len);

      // 验证子串是否能重复构成原字符串
      if (isRepeatedSubstring(inp, sub)) {
          return sub;
      }
  }
  
  // 如果没有找到循环子串,返回空字符串
  return "";

}

// 需要实现的方法:验证 sub 是否能重复构成 inp private static boolean isRepeatedSubstring(String inp, String sub) { // 计算需要拼接的次数 int repeatCount = inp.length() / sub.length();

  // 拼接 sub 多次
  StringBuilder repeated = new StringBuilder();
  for (int i = 0; i < repeatCount; i++) {
      repeated.append(sub);
  }
  
  // 比较拼接结果与 inp
  return repeated.toString().equals(inp);

}

public static void main(String[] args) { // 测试用例 System.out.println(solution("abcabcabcabc").equals("abc")); } }

关键步骤

  1. 计算需要拼接的次数:通过 inp.length() / sub.length() 计算需要拼接 sub 的次数。
  2. 拼接子串:使用 StringBuilder 拼接 sub 多次。
  3. 比较拼接结果:将拼接后的字符串与 inp 进行比较,如果相等,则返回 true,否则返回 false

建议:当面对一个题目时,首先应当考虑题目存在条件以及解题思路,分析题目中出现的可能性,多次实验,最后得到正确的答案。在某些点上要考虑到位,细节决定成败。当然,有一个工具的帮助,题目也会变得简单,在验证时,可以利用字符串的长度关系来减少不必要的计算。

总结:面对任何问题面前仿佛你在大海中找不到方向,这个时候有一个豆包MarsCode AI为你提供解题思路,解决问题也是事半功倍,当面对困难时,我不是孤立无援,它不仅仅是提高了我解题的效率,同时,也给我们带来了方便。在这个平台我看到了更多的知识点以及更多人分享的学习方法。