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

Ruby技术求助:移除1或2个字符生成至少3位回文的方法实现

问题解决方案

题目回顾

给定仅含字母的字符串,编写方法判断能否通过移除1或2个字符生成长度至少为3的回文。若可以,输出移除的字母;若不行,输出"not possible"。

代码实现

# 辅助函数:判断字符串是否为长度≥3的回文
def valid_palindrome?(s)
  s.length >= 3 && s == s.reverse
end

def palindrome_checker(str)
  original_chars = str.chars
  original_length = original_chars.length

  # 尝试移除1个字符的场景
  (0...original_length).each do |i|
    modified = original_chars.dup
    removed_char = modified.delete_at(i)
    if valid_palindrome?(modified.join)
      puts "Removed '#{removed_char}' to form palindrome"
      return
    end
  end

  # 尝试移除2个字符的场景(遍历所有不重复的位置组合)
  (0...original_length).each do |i|
    (i+1...original_length).each do |j|
      modified = original_chars.dup
      # 先删索引大的,避免删除i后j的索引偏移
      removed_j = modified.delete_at(j)
      removed_i = modified.delete_at(i)
      if valid_palindrome?(modified.join)
        puts "Removed '#{removed_i}' and '#{removed_j}' to form palindrome"
        return
      end
    end
  end

  # 所有尝试均不满足条件
  puts "not possible"
end

# 测试示例
palindrome_checker("abcecbae") # 输出 Removed 'e' and 'e' to form palindrome
palindrome_checker("abcde")    # 输出 not possible
palindrome_checker("abca")     # 输出 Removed 'b' to form palindrome

关键逻辑说明

  1. 辅助函数valid_palindrome?:统一回文判断标准,确保后续检查的字符串长度达标且符合回文定义,避免重复逻辑。
  2. 单字符移除遍历:逐个删除字符串中每个位置的字符,检查修改后的字符串是否符合要求,找到符合条件的立即输出返回,减少不必要的遍历。
  3. 双字符移除遍历:通过双重循环遍历所有不重复的位置组合(i < j),先删除索引较大的字符,防止删除前一个字符后导致后一个字符的索引偏移,保证删除位置的准确性。
  4. 终止逻辑:只要找到符合条件的移除方案就立即终止程序,优化执行效率。

原代码问题修正

  • 第一个代码混淆了字符与索引的概念,循环条件错误,且未完成核心判断逻辑。
  • 第二个代码仅处理了单字符移除场景,且错误收集了所有尝试删除的字符,无法准确定位到符合要求的移除字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:01:03