You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有更优雅的解法实现Kattis平台的Anti-palindrome问题?

问题背景

问题来自Kattis平台的Anti-palindrome题目

问题描述

给定一行文本,需要判断其中是否存在长度至少为2的回文子串(判断时忽略空格、标点等非字母字符,大小写视为相同)。如果存在,输出"Palindrome";否则输出"Anti-palindrome"。输入保证至少包含一个字母字符,长度不超过80个字符。

输入要求
  • 输入文本长度为1至80个字符
  • 内容至少包含一个字母,可包含空格、标点及其他非字母字符
输出要求
  • 若存在符合条件的回文子串,输出Palindrome
  • 若不存在,输出Anti-palindrome
我的实现解法

palindrome() 函数

这是一个bool类型的函数,用于判断字符串str中从start到end(包含两端)的子串是否为回文。

bool palindrome(char *str, long start, long end)
{
  if (start >= end)
  {
    return true;
  }
  if (!isalpha(str[start]))
  {
    return palindrome(str, start + 1, end);
  }
  if (!isalpha(str[end]))
  {
    return palindrome(str, start, end - 1);
  }
  if (tolower(str[start]) != tolower(str[end]))
  {
    return false;
  }
  return palindrome(str, start + 1, end - 1);
}

main() 函数

主函数通过两层循环遍历输入文本line的所有子串,调用上述函数判断是否存在回文。假设cs1010_read_line、cs1010_println_string这两个非标准输入输出函数可正常工作。

int main()
{
  char *line = cs1010_read_line();
  if (line == NULL)
  {
    return 1;
  }
  long len = (long)strlen(line) - 1; // 减去换行符的长度
  for (long start = 0; start < len - 2; start += 1)
  {
    for (long end = start + 2; end < len; end += 1)
    {
      if (palindrome(line, start, end))
      {
        cs1010_println_string("Palindrome");
        free(line);
        return 0;
      }
    }
  }
  cs1010_println_string("Anti-palindrome");
  free(line);
}
请教问题

请问有没有更优雅的解法?可以在效率或者代码简洁性上对这个实现进行优化吗?


内容的提问来源于stack exchange,提问作者mendax1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:47:03