NTFY 超得屁(°∀°)ノ 2023-08-18 06:04 采纳率: 50%
浏览 12

CSDN每日一题求解

题目名称:影分身

时间限制: 1000ms 内存限制: 256M

通过率:20%

题目描述

已知字符串str。字符串str包含字符’x’,’y’。 如果相邻的两个字符不同,消除两个字符,优先从左边进行消除。 xyyx - > yx ->

输入描述

输入多个字符。(1<=len<=1e5)

输出描述

输出最后的分身

示例
示例1

输入:

xyyyy

输出:

yyy
###python代码

class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, str):
        result = []
        i=0
        while i < len(str):
            if i<len(str)-1 and str[i]!=str[i+1]:
                i+=2
            else:
                result.append(str[i])
                i+=1
        return ''.join(result)

if __name__ == "__main__":
    str = input().strip()
    sol = Solution()
    result = sol.solution(str)
    print(result)

通过率只有20%,想知道为啥?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-18 08:02
    关注

    【以下回答由 GPT 生成】

    我会尽量帮助您优化代码以提高通过率。根据题目描述,您的解法是遍历字符串,如果相邻两个字符不同,则消除这两个字符。优化的关键是找到更高效的解法。以下是我针对您的代码给出的优化建议:

    1. 避免额外的空间开销。您的代码中使用了一个result列表来保存结果,然后再使用join函数来将列表转换为字符串。这里可以直接使用一个指针来记录结果字符串的末尾位置,并原地修改输入的字符串。

    2. 使用双指针法。通过维护两个指针来标记未消除的字符的起始位置和结束位置(初始值为0和1)。遍历字符串,当遇到相邻两个字符不同的情况时,将起始位置指针移动到结束位置的后一个位置,并更新结束位置指针为起始位置指针的下一个位置。这样可以通过一次遍历完成消除操作。

    3. 可以考虑使用一个计数器来记录连续相同字符的个数,减少判断的次数和增加效率。

    下面是优化后的代码示例:

    class Solution:
        def solution(self, s: str) -> str:
            n = len(s)
            ans = list(s)
            start = 0
            end = 1
    
            while end < n:
                if ans[start] != ans[end]:
                    length = end - start
                    if length >= 2:
                        ans[start+1:end] = [''] * (length-1)
                    start = end
                end += 1
    
            return ''.join(ans).replace('', '')  # 移除空字符
    
    if __name__ == "__main__":
        s = input().strip()
        sol = Solution()
        result = sol.solution(s)
        print(result)
    

    这样的代码优化可以使通过率更高,但最终结果仍然可能受到测试用例的影响。如果通过率还不理想,可以考虑其他的解法或优化策略。希望对您有所帮助!


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月18日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画