按指定分隔符拆分字符串检测回文时的尾部分隔符去除问题
解决分隔符拆分后末尾符号残留的问题
我太懂这种卡壳的感觉了——明明循环逻辑看着没问题,结果最后一个子串偏偏带着尾巴上的点号,直接搞砸了回文检测!其实问题出在你之前的循环只处理了中间的分隔符,但句子末尾的点号后面没有后续内容,导致循环结束时没机会把它剥离掉。
给你两个实用的解决思路,看你习惯哪种:
思路一:用正则表达式一键拆分(最省心)
正则可以直接帮你处理所有分隔符的情况,包括首尾的符号和连续的分隔符,一步到位得到干净的子串列表。比如在Python里可以这么写:
import re input_str = "hello,potato." # 先去掉首尾的空白/分隔符,再按1个或多个分隔符拆分 words = re.split(r'[ ,.]+', input_str.strip()) # 过滤掉可能出现的空字符串(比如连续分隔符导致的) words = [word for word in words if word] # 检测每个子串是否为回文 for word in words: is_palindrome = word == word[::-1] print(f"'{word}' 是回文吗?{'是' if is_palindrome else '不是'}")
这里的r'[ ,.]+'表示匹配一个或多个空格、逗号或点号,strip()先把字符串首尾的无关符号清掉,最后过滤空串是为了避免比如输入是",,,hello.."这种极端情况产生无效的空元素。
思路二:手动遍历处理(不用依赖正则)
如果你不想用正则,也可以手动调整循环逻辑,先清理首尾的分隔符,再逐个字符收集子串:
input_str = "hello,potato." # 先把字符串首尾的空格、逗号、点号全部清掉 cleaned_str = input_str.strip(' ,.') words = [] current_word = [] for char in cleaned_str: # 遇到分隔符时,把当前收集的子串存入列表 if char in ' ,.': if current_word: # 防止连续分隔符产生空串 words.append(''.join(current_word)) current_word = [] else: current_word.append(char) # 别忘了把最后一个收集的子串加进去 if current_word: words.append(''.join(current_word)) # 回文检测 for word in words: is_palindrome = word == word[::-1] print(f"'{word}' 是回文吗?{'是' if is_palindrome else '不是'}")
这个方法的核心是先清理首尾的干扰符号,再遍历收集字符,遇到分隔符就收尾当前子串,最后把循环结束后剩下的最后一个子串也加入列表,完美避免了末尾符号残留的问题。
内容的提问来源于stack exchange,提问作者Mostafa Anwar
相关产品推荐
相关产品推荐

