钱眼里 2024-04-27 16:50 采纳率: 62.5%
浏览 33

简单编程问题,判断两个字符串一个是否为另一个的排列

img


我的代码的思想是先判断str1和str2是否相等,不是直接输出No,是的话进行如下操作:遍历str2,内部遍历str1,在str1中找到第一个与str2[i]相同的字符并称删除str1[j],退出内部循环直接进入下一次外部循环,我每次只会删除str1中一个与str2中相同的字符,最后如果str1为空,就说明两个字符串字符数量相同,且同一个字符数量相同,即一个是另一个的排列,按道理来说是没问题的,我自己测试也没问题,但是蓝桥杯不给过,求指惑。没一个真人回答,全是chat,给出的解答都不好,我就想知道我的代码有没有错,哪里错了。

  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-04-27 22:59
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    首先,你的思路是有问题的。你的代码只会删除str1中与str2中相同的一个字符,而实际上需要删除所有相同的字符才能判断两个字符串是否为排列。另外,你的代码中没有考虑空字符串的情况,当str1为空而str2不为空时,应该返回No。
    下面是一个更加合理的解决思路和代码:

    解决思路:

    1. 检查两个字符串长度是否相等,如果不相等直接返回"No"。
    2. 使用哈希表记录每个字符在两个字符串中出现的次数。
    3. 遍历哈希表,如果任何一个字符在两个字符串中出现的次数不相等,则返回"No"。
    4. 如果遍历完哈希表没有返回"No",则说明两个字符串是排列关系,返回"Yes"。

      解决方案(Python代码):

      python
      Copy code
      def are_permutations(str1, str2):
      if len(str1) != len(str2):
      return "No"
      char_count = {}
      # 统计str1中每个字符的出现次数
      for char in str1:
      if char in char_count:
      char_count[char] += 1
      else:
      char_count[char] = 1
      # 检查str2中每个字符的出现次数是否与str1相同
      for char in str2:
      if char in char_count:
      char_count[char] -= 1
      if char_count[char] < 0:
      return "No"
      else:
      return "No"
      # 检查是否还有剩余字符未被匹配
      for count in char_count.values():
      if count != 0:
      return "No"
      return "Yes"
      # 测试示例
      str1 = "abcdef"
      str2 = "fedcba"
      print(are_permutations(str1, str2))  # 输出:Yes
      str3 = "abc"
      str4 = "abd"
      print(are_permutations(str3, str4))  # 输出:No
      
      这段代码通过哈希表记录每个字符的出现次数,然后在遍历第二个字符串时逐个减少对应字符的计数。最后检查哈希表中是否还有剩余计数不为零的字符,如果有则返回"No",否则返回"Yes"。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    评论

报告相同问题?

问题事件

  • 修改了问题 4月27日
  • 创建了问题 4月27日

悬赏问题

  • ¥20 python爬虫遇到空文本取不出来
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入