Python 字符串转换


假设我们有两个字符串 str1 和 str2。它们的长度相同,我们需要检查是否可以通过零次或多次转换将 str1 转换为 str2。

在一次转换中,我们可以将 str1 中所有出现的一个字符转换为任何其他小写英文字母。我们需要检查是否可以将 str1 转换为 str2。

因此,如果输入类似于 str1 = "aabcc",str2 = "ccdee",则输出为 true,因为可以将 'c' 转换为 'e',然后将 'b' 转换为 'd',然后将 'a' 转换为 'c'。这里需要注意的是转换的顺序很重要。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数 compress()。它将接收字符串 s

  • n := s 的大小

  • a := 新列表

  • count := 1

  • 对于范围 1 到 n 中的 i,执行:

    • 如果 s[i] 与 s[i-1] 不相同,则

      • 将 count 插入到 a 的末尾

      • count:= 1

    • 否则,

      • count := count + 1

  • 将 count 插入到 a 的末尾

  • 返回 a

  • 定义一个函数 canConvert()。它将接收 str1,str2

  • a := compress(str1)

  • b := compress(str2)

  • n := a 的大小,m := b 的大小

  • d:= 新映射

  • n := n 和 m 的最小值

  • i := 0

  • 当 i<n 为非零时,执行:

    • 如果 a[i] > b[i] 为非零,则

      • 返回 False

    • i := i + 1

  • 对于 str2 中的每个 i,执行:

    • 如果 i 不在 d 中,则

      • d[i]:= 1

  • 如果 26 - d 的大小为非零或 str1 与 str2 相同,则返回 True,否则返回 False

让我们看看下面的实现,以便更好地理解:

示例

 在线演示

class Solution(object):
   def compress(self,s):
      n = len(s)
      a = []
      count = 1
      for i in range(1,n):
         if s[i]!=s[i-1]:
            a.append(count)
            count=1
         else:
            count+=1
      a.append(count)
      return a
   def canConvert(self, str1, str2):
      a = self.compress(str1)
      b = self.compress(str2)
      n = len(a)
      m = len(b)
      d={}
      n = min(n,m)
      i = 0
      while i<n:
         if a[i]>b[i]:
            return False
            i+=1
         for i in str2:
            if i not in d:
               d[i]=1
      return True if 26-len(d) or str1 == str2 else False

ob = Solution()
print(ob.canConvert("aabcc", "ccdee"))

输入

"aabcc", "ccdee"

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

True

更新于:2020年7月11日

1K+ 浏览量

启动你的职业生涯

通过完成课程获得认证

开始学习
广告