找出符合规律的密码

1. 请用已学过的知识编写程序,找出给定长字符串中的密码,密码的埋藏点符合以下规律:Y5d|MAp
Y5d|MAp
    a) 每位密码为单个小写字母

    b) 每位密码的左右两边均有且只有三个大写字母

 

Python

3um7_0 Pzy"pCV#RdwA,21^[t

  1. str1 = '''
  2. YnaJfNLqJgcxRjBmRpOYgNpZOpzMOCVIRiiXdIqqFxPJhQqJadKiCesOsZoWGWbbQSVRZUlbNZdzeUTE
  3. nhdMSCKCPbpWZguZHGkLiWCisjqnaLbJpbRFAHPjGbHOXKZQXoQQZohmVqjTcdWNhXEjPlLKnjpwbMPQ
  4. ybzDvGgkybXtbDmjQuyOrMrcYGRGGfuuPXzieaetSBidnSRPsLaXKGcxDkXmHbqMWZJXsQkwtojlxOeU
  5. KSIFdVvNEnOUmIZDdlnwtJcPBlcpRWNTazpzgItwJotSLWZruzrMlSGASMWDwOqTpeYYHaTHCCurPdwB
  6. AWzUtwblZXNrBYdjUoDacvmRVURqOzUPlnFISsZMFPtthnDHSsFgkYfsMtXFuNPhLTleWVrmelyFaemo
  7. bVIhEAxNwOUDQCOCDIBHsQlFxCbHErKiBsvQNjuIGnIzZiwoVTdUZnucSaKdHrxJeGQfTawFJefGJFFa
  8. GHzELfnGBmkZyorbbDDwhvEVeIYIGLPMEuZduqFjbeWbVfzVIRZNXwPLgcYUsevuhEQXfYcJshYnJaWz
  9. iqvlswEBRKNYEJidlzdWnQJpBtyjHYVpkQGzdYkeREqjhmmnUIbGZVnwwaMKqgXfURSICNxdteUSGhGZ
  10. UEEFhWRoTKGRwFmPpZPOsalsrNOlkTdXqGKoWlWkqJvYYrtLiTfhdItMbbhdumSYgCcQVUARnYFWkCsC
  11. jElZxrQHIlbTHFLOnrutlvyxzaSIdkJgeyMUnUmtXfnaIedbAInAuQssOQqBTLbvFRiqKqUSdUEmcRmN
  12. LvAxlgliymfbjTwDSqNTLcAEIerzpUShNKkuehciEAYeGJOFFcOvurJFUyfZhQqzfaneiBcrPhaphSCB
  13. StQiJvtoPhHcLUbriDUIfifVFnNtJfGlmcbQJSXsZfVjpbqnkMllUmHzLvEuSarSlNlNHsWvYlfhjMEA
  14. epYTjoRGZeAAtURFeDfDxTYmOmONuQQBdcdncFGjhHmKlwqmUWoXuIXIxaaXnNThgPGtIlynrUIPLQTG
  15. xXhattDrfBGbZRveKbgjzxJLdYREQlMeLtcIEUoyJocdAfUbymxuFLVjGkOQniiPParqoyQYfDYAQTkM
  16. WLicLxpEFkBbwlKrTyYilKTtYkpVGxtOjYmcBDOrwFhFiGutmpTyTarUbVUeSevBTdaPDpjRkaEmLJMg
  17. WsMhSGfIcBChcqrRKgKpjvGnFipjswgjetRtniMagakbCXAjpzWTtMlgZGCJwGyglpcLebrKWhgwJfWV
  18. qGifWNEpCtjuejHoyVCdIxzMYGnfoslgTNAJdtVBWDVoGLzHSAVBTnhNIvAOExQNiJOIPPiHkdaRbfaP
  19. ixDDoCDOOeAqvQJFxLWDICfGmufyxmaMshbvcrtjqqVtffZTnbtCOQfzRMGwOQEKaAmSWjnYdNgvdkmd
  20. dQmaKZSdqKNrnvJlcyVMKuNWmuoOeyKecgjXbmSqnpjwJEaDYoehEklEgJyiksGxdEKgfYRXQecRZgfe
  21. qKWGc
  22. '''
  23. countA = 0  # 统计前边的大写字母
  24. countB = 0  # 统计小写字母
  25. countC = 0  # 统计后边的大写字母
  26. length = len(str1)
  27. for i in range(length):
  28.     if str1[i] == '\n':
  29.         continue
  30.     """
  31.     |如果str1[i]是大写字母:
  32.     |-- 如果已经出现小写字母:
  33.     |-- -- 统计后边的大写字母
  34.     |-- 如果未出现小写字母:
  35.     |-- -- 清空后边大写字母的统计
  36.     |-- -- 统计前边的大写字母
  37.     """
  38.     if str1[i].isupper():
  39.         if countB:
  40.             countC += 1
  41.         else:
  42.             countC = 0
  43.             countA += 1
  44.     """
  45.     |如果str1[i]是小写字母:
  46.     |-- 如果小写字母前边不是三个大写字母(不符合条件):
  47.     |-- -- 清空所有记录,重新统计
  48.     |-- 如果小写字母前边是三个大写字母(符合条件):
  49.     |-- -- 如果已经存在小写字母:
  50.     |-- -- -- 清空所有记录,重新统计(出现两个小写字母)
  51.     |-- -- 如果该小写字母是唯一的:
  52.     |-- -- -- countB记录出现小写字母,准备开始统计countC
  53.     """
  54.     if str1[i].islower():
  55.         if countA != 3:
  56.             countA = 0
  57.             countB = 0
  58.             countC = 0
  59.         else:
  60.             if countB:
  61.                 countA = 0
  62.                 countB = 0
  63.                 countC = 0
  64.             else:
  65.                 countB = 1
  66.                 countC = 0
  67.                 target = i
  68.     """
  69.     |如果前边和后边都是三个大写字母:
  70.     |-- 如果后边第四个字母也是大写字母(不符合条件):
  71.     |-- -- 清空记录B和C,重新统计
  72.     |-- 如果后边仅有三个大写字母(符合所有条件):
  73.     |-- -- 打印结果,并清空所有记录,进入下一轮统计
  74.     """
  75.     if countA == 3 and countC == 3:
  76.         if i+1 != length and str1[i+1].isupper():
  77.             countB = 0
  78.             countC = 0
  79.         else:
  80.             print(str1[target], end='')
  81.             countA = 3
  82.             countB = 0
  83.             countC = 0

q

上一篇:字符串的常量池


下一篇:POJ3342树状动态规划