[Python3 练习] 010 找出字符串中特定的字符

题目:找出藏在字符串中的“密码”

(1) 描述

1) 题源1

2) 题源2

  • 这几日挺巧的

    • 在鱼 C 论坛上找 Python 习题,点开第 20 节,看到两道操作题
    • 又想起一个网站 Python Challenge ,久闻其名,未曾拜访,遂一探究竟
    • 原来小甲鱼老师第 20 节的两道操作题改编自 Python Challenge 的 level2 与 level 3

2) 修改

  • 题中仍带有一条极长的字符串,不方便写在此随笔中
  • 我自己又心血来潮,将此题改了改(其实降低难度)
  • 具体见下方要求

(2) 要求

  • 有一字符串,仅含大小写英文字母(回车、空格等均不在其列)
  • 若 1 个小写字母左右两边均有且仅有 3 个大写字母,则将其挑出
  • 将所有挑出的小写字母按顺序输出
  • 例如
    • AAAAjBBBpCCCrDDmEEEyFFFqqGGG
    • 输出 py

(3) 程序

  • 解法 1:一一检测(像是暴力破解)
def decrypt(string):
    len_str = len(string)
    target = 4

    if \    # 检测 3 号位
    string[0].isupper() and     string[1].isupper() and     string[2].isupper() and     string[3].islower() and     string[4].isupper() and     string[5].isupper() and     string[6].isupper() and     string[7].islower():
        print(string[3], end=‘‘)

    while target < len_str-4:
        if \# 检测中间各位
        string[target-4].islower() and \    # 若有多种字符,可用 not string[i].isupper()
        string[target-3].isupper() and         string[target-2].isupper() and         string[target-1].isupper() and         string[target  ].islower() and         string[target+1].isupper() and         string[target+2].isupper() and         string[target+3].isupper() and         string[target+4].islower():
            print(string[target], end=‘‘)
            target += 4
        else:
            target += 1

    if \    # 检测倒数第 4 位
    string[len_str-7].islower() and     string[len_str-6].isupper() and     string[len_str-5].isupper() and     string[len_str-4].islower() and     string[len_str-3].islower() and     string[len_str-2].isupper() and     string[len_str-1].isupper() and     string[len_str  ].isupper():
        print(string[len_str-3], end=‘‘)
  • 解法 2:利用编号

因为字符串中只有大小写英文字母,所以先找出所有小写英文字母的编号,再检查编号的间距。

若左右相邻的编号大小均相差 4,则该编号对应的字母即为所求之一。

(若有回车符,可用 if 语句将非回车符依次写入列表中,再用以下程序。)

def decrypt(string):
    len_str = len(string)
    list0 = []
    for i in range(len_str):            # 找出所有小写字母在 string 中的编号,并写入 list0
        if string[i].islower():
            list0.append(i)

    len_list0 = len(list0)
    list1 = []
    if list0[0] == 3 and list0[1] == 7: # 检测 3 号位
        list1.append(3)
    for i in range(1, len_list0-1):     # 找出 list0 中符合要求的小写字母的编号
        if (list0[i]-4) == list0[i-1] and (list0[i]+4) == list0[i+1]:
            list1.append(list0[i])
    if list0[-1] == len_str-4 and     list0[-2] == len_str-8:             # 检测倒数第 4 位
        list1.append(list0[-1])

    len_list1 = len(list1)
    for i in range(len_list1):          # 输出
        print(string[list1[i]], end=‘‘)
  • 解法 3:利用 3 个变量,统计大小写字母的个数(详见下方 countA、countB、countC)
def decrypt(string):
    countA = 0  # 统计小写字母左侧的大写字母
    countB = 0  # 统计小写字母
    countC = 0  # 统计小写字母右侧的大写字母

    len_str = len(string)
    for i in range(len_str):
        if string[i].isupper():
            if countB:              # AAAaA AAAaAA AAAaAAA
                countC += 1
            else:                   # A AA AAA AAAA ...
                countC = 0
                countA += 1

        if string[i].islower():
            if countA != 3:         # a Aa AAa AAAAa ...
                countA = 0
                countB = 0
                countC = 0
            else:
                if countB:          # AAAaa
                    countA = 0
                    countB = 0
                    countC = 0
                else:               # AAAa
                    countB = 1
                    countC = 0
                    target = i

        if countC == 3:
            if i+1 != len_str and \ # 若 i 未迭代到最后一位
            string[i+1].isupper():  # AAAaAAAA
                countB = 0
                countC = 0
            else:                   # AAAaAAAb 总算找到了一个 a
                print(string[target], end=‘‘)
                countA = 3          # AAAb
                countB = 0
                countC = 0

原文地址:https://www.cnblogs.com/yorkyu/p/10386418.html

时间: 2024-10-13 22:05:01

[Python3 练习] 010 找出字符串中特定的字符的相关文章

c语言代码编程题汇总:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值

找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 程序代码如下: 1 /* 2 2017年3月8日08:39:16 3 功能:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 4 */ 5 6 #include"stdio.h" 7 int main (void) 8 { 9 int i = 0, j = 0; 10 char a[100]; 11 char ch; 12 int num = 0; 13 14 printf ("please inp

找出字符串中出现次数最多的字符,和最大次数

/*找出字符串中出现次数最多的字符,和最大次数*/ function countMax(str){ var max = 0; // 记录出现的最大次数 var maxChar = ""; // 记录出现最多次数的字符 var counts = new Array(127); // 记录中间计算结果 for(var i = 0; i < counts.length; i++){ counts[i] = 0; } for(var i = 0; i < str.length; i

找出字符串中第一个不重复的字符(JavaScript实现)

如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达. 1 //找出字符串中第一个不重复的字符 2 // firstUniqueChar("vdctdvc"); --> t 3 function firstUniqueChar(str){ 4 var str = str || "", 5 i = 0, 6 k = "", 7 _char = "", 8 charMap = {}, 9 result =

华为OJ:找出字符串中第一个只出现一次的字符

可以稍微让代码写的好看,不用直接写双循环的话,就可以写成函数的调用,重用性也很高. import java.util.Scanner; public class findOnlyOnceChar { public static boolean FindChar(String pInputString, char pChar){ int count=0; for(int i=0;i<pInputString.length();i++){ if(pInputString.charAt(i)==pCh

找出字符串中第一个出现次数最多的字符

找出字符串中第一个出现次数最多的字符 详细描述: 接口说明 原型: bool FindChar(char* pInputString, char* pChar); 输入参数: char* pInputString:字符串 输出参数(指针指向的内存区域保证有效): char* pChar:出现次数最多的字符 返回值: false 异常失败 true  输出成功 #include <iostream> #include <string.h> using namespace std; b

找出字符串中第一个只出现一次的字符

find the first unique character in  a string and you can just traverse this string only one time. if there is no such character, just return '#' and '#' will not appear in the string, else return the character you find. for example: "aAbBABac",

js常会问的问题:找出字符串中出现次数最多的字符。

一.循环obj let testStr = 'asdasddsfdsfadsfdghdadsdfdgdasd'; function getMax(str) { let obj = {}; for(let i in str) { if(obj[str[i]]) { obj[str[i]]++; }else{ obj[str[i]] = 1; } } let keys = Object.keys(obj); // 获取对象中所有key的值返回数组 let values = Object.values

35 - 找出字符串中第一个只出现一次的字符

在一个字符串中找到第一个只出现一次的字符. 如输入"abaccdeff",输出'b' 解析: 使用一个数组,记录每个字符出现的次数,最后遍历计数数组,第一个个数为 1 的即为结果. 由于字符char,只有8 bit, 只有255种可能,因此只需声明一个255大小的数组. 遍历一次字符串,遍历2次计数数组:时间复杂度O(n) 空间占用255*int = 512 Byte,是一个固定大小:空间复杂度O(1) 当需要统计某个或某些字符是否出现或出现在字符串中的次数时,可以通过数组实现一个简易

[LeetCode] Find All Anagrams in a String 找出字符串中所有的变位词

Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100. The order of output does not matter.