CSDN每日一题学习训练——Python版(新浪微博热门话题、Z 字形变换)

版本说明

当前版本号[20231117]。

版本修改说明
20231117初版

目录

文章目录

  • 版本说明
  • 目录
  • 新浪微博热门话题
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码
  • Z 字形变换
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码

新浪微博热门话题

题目

​ 新浪微博可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或者相似的话题。新浪微博还会随时更新热门话题列表,并将最热门的话题放在醒目的位置推荐大家关注。 本题目要求实现一个简化的热门话题推荐功能,从大量英文(因为中文分词处理比较麻烦)微博中解析出话题,找出被最多条微博提到的话题。 输入格式: 输入说明:输入首先给出一个正整数N(≤105),随后N行,每行给出一条英文微博,其长度不超过140个字符。任何包含在一对最近的#中的内容均被认为是一个话题,输入保证#成对出现。 输出格式: 第一行输出被最多条微博提到的话题,第二行输出其被提到的微博条数。如果这样的话题不唯一,则输出按字母序最小的话题,并在第三行输出And k more …,其中k是另外几条热门话题的条数。输入保证至少存在一条话题。 注意:两条话题被认为是相同的,如果在去掉所有非英文字母和数字的符号、并忽略大小写区别后,它们是相同的字符串;同时它们有完全相同的分词。输出时除首字母大写外,只保留小写英文字母和数字,并用一个空格分隔原文中的单词。 输入样例: 4 This is a #test of topic#. Another #Test of topic.# This is a #Hot# #Hot# topic Another #hot!# #Hot# topic 输出样例: Hot 2 And 1 more

解题思路

  1. 导入正则表达式模块re。
  2. 输入微博数量a,要求为小于等于105的正整数。
  3. 定义两个空列表b和c,分别用于存储微博内容和微博中的标签。
  4. 使用while循环,当微博数量小于输入的数量时,继续循环。
  5. 在循环中,输入微博内容x,要求小于140字。
  6. 如果微博内容长度小于140字,将微博内容添加到列表b中;否则提示用户重新输入。
  7. 使用正则表达式提取微博中的标签,并添加到列表c中。
  8. 计算每个标签在微博中出现的次数,并将结果存储在字典列表d中。
  9. 根据标签出现的次数对字典列表d进行降序排序。
  10. 输出出现次数最多的标签名称(首字母大写)和该标签在微博中出现的次数。

代码思路

  1. 导入正则表达式模块;

    import re  # 导入正则表达式模块
    
  2. 输入微博数量,要求为小于等于105的正整数;

    a = int(input('输入微博数量(小于等于105的正整数):'))  # 输入微博数量,要求为小于等于105的正整数
    
  3. 定义两个空列表,用于存储微博内容和标签;

    b = []  # 定义一个空列表,用于存储微博内容
    c = []  # 定义一个空列表,用于存储微博中的标签
    
  4. 使用while循环,当微博数量小于输入的数量时,继续循环;

    while len(b) < a:  # 当微博数量小于输入的数量时,继续循环x = input('请输入微博内容,小于140字:')  # 输入微博内容,要求小于140字
    
  5. 在循环中,输入微博内容,要求小于140字;

    if len(x) < 140:  # 如果微博内容长度小于140字
    
  6. 如果微博内容长度小于140字,将微博内容添加到列表b中;

    b.append(x)  # 将微博内容添加到列表b中
    
  7. 如果微博内容长度大于等于140字,提示用户重新输入;

       else:  # 如果微博内容长度大于等于140字print('信息超出140字限制,请从新输入。')  # 提示用户重新输入
    
  8. 使用正则表达式提取微博中的标签,并添加到列表c中;

    c += re.findall('#[^#]+#', x)  # 使用正则表达式提取微博中的标签,并添加到列表c中
    
  9. 计算每个标签在微博中出现的次数,并将结果存储在字典列表d中;

    d = [{'n': n, 'c': len(c) - len(re.findall('#[^#]+#', re.sub(n, '', ''.join(c.copy()))))} for n in set(c)]  # 计算每个标签在微博中出现的次数,并将结果存储在字典列表d中
    
  10. 根据标签出现的次数对字典列表d进行降序排序;

    e = sorted(d, key=lambda x: x['c'], reverse=True)  # 根据标签出现的次数对字典列表d进行降序排序
    
  11. 输出出现次数最多的标签名称,首字母大写;

    print(e[0]['n'].title())  # 输出出现次数最多的标签名称,首字母大写
    
  12. 输出该标签在微博中出现的次数。

print(e[0]['c'])  # 输出该标签在微博中出现的次数

参考代码

import re
a = int(input('输入微博数量(小于等于105的正整数):'))
b = []
c = []
while len(b)<a:x = input('请输入微博内容,小于140字:')if len(x)<140:b.append(x)else:print('信息超出140字限制,请从新输入。')c += re.findall('#[^#]+#',x)
d = [{'n':n,'c':len(c)-len(re.findall('#[^#]+#',re.sub(n,'',''.join(c.copy()))))} for n in set(c)]
e = sorted(d,key=lambda x:x['c'],reverse=True)
print(e[0]['n'].title())
print(e[0]['c'])

Z 字形变换

题目

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

P A H N
A P L S I I G
Y I R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”

示例 2:

输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”
解释:
P I N
A L S I G
Y A H R
P I

示例 3:

输入:s = “A”, numRows = 1
输出:“A”

提示:

1 <= s.length <= 1000
s 由英文字母(小写和大写)、‘,’ 和 ‘.’ 组成
1 <= numRows <= 1000

解题思路

  1. 首先计算字符串的长度n和行数N。
  2. 如果字符串长度为1或行数为1,直接返回原字符串。
  3. 计算中间行的间隔数S和每行的总字符数C。
  4. 计算完整循环的次数R和剩余的字符数RS。
  5. 计算每行剩余的字符数CE和最后一行剩余的字符数RR。
  6. 计算最后一行的字符数RX。
  7. 初始化一个空列表output,用于存储转换后的字符。
  8. 使用两层循环遍历每一行和每一列,根据当前字符所在的行数和位置计算出其在原字符串中的偏移量offset,然后根据偏移量找到对应的字符并添加到output列表中。
  9. 如果当前行不是第一行和最后一行,还需要添加下一行的字符。
  10. 最后将output列表转换为字符串并返回。

代码思路

  1. 首先计算字符串的长度n和行数N。

  2. 如果字符串长度为1或行数为1,直接返回原字符串。

       if n == 1 or N == 1:  # 如果字符串长度为1或行数为1,直接返回原字符串return s
    
  3. 计算中间行的间隔数S和每行的总字符数C。

     S = N-2  # 中间行的间隔数C = 2*N-2  # 每行的总字符数
    
  4. 计算完整循环的次数R和剩余的字符数RS。

    R = int(math.floor(n/C))  # 完整循环的次数
    RS = n % (C)  # 剩余的字符数
    
  5. 计算每行剩余的字符数CE和最后一行剩余的字符数RR。

    CE = n-R*C  # 每行剩余的字符数
    RR = 1 if (RS <= N) else 1+(RS-N)  # 最后一行剩余的字符数
    
  6. 计算最后一行的字符数RX。

     RX = R*(N-1) + RR  # 最后一行的字符数
    
  7. 初始化一个空列表output,用于存储转换后的字符。

  8. 使用两层循环遍历每一行和每一列,根据当前字符所在的行数和位置计算出其在原字符串中的偏移量offset,然后根据偏移量找到对应的字符并添加到output列表中。

        while i < N:j = 0k = (N-1-i)while j < RX:r = int(math.floor(j/(N-1)))  # 当前字符所在的行数rs = j % (N-1)  # 当前字符在该行的位置offset = i if rs == 0 else N+rs-1  # 当前字符在原字符串中的偏移量index = r*C+offset  # 当前字符在原字符串中的位置if index < len(s):  # 如果该位置有字符,添加到输出列表中output.append(s[index])
    
  9. 如果当前行不是第一行和最后一行,还需要添加下一行的字符。

     if i > 0 and i < N-1:  # 如果不是第一行和最后一行,还需要添加下一行的字符r = int(math.floor(k/(N-1)))rs = k % (N-1)offset = i if rs == 0 else N+rs-1index = r*C+offsetif index < len(s):output.append(s[index])j += (N-1)k += (N-1)i += 1
    
  10. 最后将output列表转换为字符串并返回。

                 return ''.join(output)  # 将输出列表转换为字符串并返回

参考代码

import math
class Solution:def convert(self, s: str, numRows: int) -> str:n = len(s)N = numRowsif n == 1 or N == 1:return sS = N-2C = 2*N-2R = int(math.floor(n/C))RS = n % (C)CE = n-R*CRR = 1 if (RS <= N) else 1+(RS-N)RX = R*(N-1) + RRoutput = []i = 0while i < N:j = 0k = (N-1-i)while j < RX:r = int(math.floor(j/(N-1)))rs = j % (N-1)offset = i if rs == 0 else N+rs-1index = r*C+offsetif index < len(s):output.append(s[index])if i > 0 and i < N-1:r = int(math.floor(k/(N-1)))rs = k % (N-1)offset = i if rs == 0 else N+rs-1index = r*C+offsetif index < len(s):output.append(s[index])j += (N-1)k += (N-1)i += 1return ''.join(output)
# %%
s = Solution()
print(s.convert('PAYPALISHIRING', 3))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 设计模式-简洁版

Java 中包括以下设计模式&#xff1a; 其中Spring 用到的设计模式 1.简单工厂-BeanFactory 2.工厂方法FactoryBean 3.单例模式Bean实例 4.适配器模式SpringMVC中的HandlerAdatper 5.装饰器模式BeanWrapper 6.代理模式_AOP底层 7.观察者模式-spring的事件监听 8.策略横式exclud…

C#委托初步

委托可以很方便地实现对一个对象方法的扩展 PhotoFilters是一个类&#xff0c;有3个人方法&#xff1a; public void ApplyBrightness(Photo photo){Console.WriteLine("亮度增加");}public void ApplyContrast(Photo photo){Console.WriteLine("对比度增加&q…

【限时免费】20天拿下华为OD笔试之 【不定滑窗】2023B-字符串摘要【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出说明 示例二输入输出说明 解题思路滑窗三问滑窗三答 代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 给定一个字符串的摘要算法&#xff0c;请输出给定字符串…

基于人工电场算法优化概率神经网络PNN的分类预测 - 附代码

基于人工电场算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于人工电场算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于人工电场优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

WPF如何实现应用程序托盘

在WPF中实现应用程序托盘图标和菜单功能通常需要使用System.Windows.Forms.NotifyIcon类&#xff0c;因为WPF本身并没有直接提供这样的控件。为了使用NotifyIcon&#xff0c;你需要添加对System.Windows.Forms的引用。以下是如何实现的步骤&#xff1a; 1. 添加对 System.Wind…

jedis连接redis

package com.wsd;import redis.clients.jedis.Jedis;import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties;public class Redis {public static void main(String[] args) {//读取properti…

Windows11 python3.12 安装pyqt6 pyqt6-tools

Windows11 python3.12 安装pyqt6比较容易&#xff0c;但pyqt6-tools一直安装不上去。出错信息如下&#xff1a; (venv) PS D:\python_project\pyqt6> pip install pyqt6-tools Collecting pyqt6-toolsUsing cached pyqt6_tools-6.4.2.3.3-py3-none-any.whl (29 kB) Collec…

思源笔记的优缺点 vs Obsidian vs Logseq vs Trilium

新用户对思源笔记的印象。&#xff08;PS&#xff1a;两年前我试用过思源笔记&#xff0c;被卡顿劝退了&#xff09; 优点 相比obsidian&#xff0c; 可在文档树拖拽 拖拽调整笔记顺序 拖拽使一个笔记成为另一个笔记的子笔记&#xff0c;树状结构 设置-文档树&#xff0c;默认…

homeassiant主题

下载主题 https://github.com/maartenpaauw/home-assistant-community-themes.git 使用file editor到homeassiant路径下&#xff0c;新建文件夹themes文件夹&#xff0c;用terminal新建也可以。 使用file editor上传文件 使用Terminal解压 mkdir themes unzip home-assistan…

Redis(消息队列Stream)

Stream是一个轻量级的消息队列。 Redis中Stream的作用是提供一种高效的消息传递机制&#xff0c;允许多个消费者并行地消费消息&#xff0c;并且不会重复消费已经处理过的消息。它可以用于实现分布式任务队列、日志收集、实时数据处理等场景。Redis中的Stream支持多个消费者组…

RabbitMQ 消息丢失解决 (高级发布确认、消息回退与重发、备份交换机)

目录 一、发布确认SpringBoot版本 确认机制图例&#xff1a; 代码实战&#xff1a; 代码架构图&#xff1a; 1.1交换机的发布确认 添加配置类 消息消费者 消息生产者发布消息后的回调接口 测试&#xff1a; 1.2回退消息并重发&#xff08;队列的发布确认&#xff09; …

windows 11 本地运行ER-NeRF及pytorch3D安装

ER-NeRF本地运行只要梳理好依赖版本&#xff0c;运行起来就很顺畅 conda create -n ernerf python3.10 创建本项目虚拟环境conda install pytorch1.12.1 torchvision0.13.1 cudatoolkit11.3 -c pytorch 若windows有多个版本的cuda&#xff0c;需要在环境变量中切换至cuda 11.3&…

使用composer安装ffmpeg的步骤

以下是使用composer安装ffmpeg的步骤&#xff1a; 1.在laravel根目录下执行以下命令安装ffmpeg&#xff1a; composer require php-ffmpeg/php-ffmpeg 2.如果不指定版本号&#xff0c;则默认使用0.14版本。 3.执行以上命令后&#xff0c;composer会自动下载并安装ffmpeg。 …

完整版解答!2023年数维杯国际大学生数学建模挑战赛B题

B题完整版全部5问&#xff0c;问题解答、代码&#xff0c;完整论文、模型的建立和求解、各种图表代码已更新&#xff01; 大家好&#xff0c;目前已完成2023数维杯国际赛B题全部5问的代码和完整论文已更新&#xff0c;部分展示如下&#xff1a; 部分解答图表 问题分析 B题前三…

TensorFlow案例学习:图片风格迁移

准备 官方教程&#xff1a; 任意风格的快速风格转换 模型下载地址&#xff1a; https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2 学习 加载要处理的内容图片和风格图片 # 用于将图像裁剪为方形def crop_center(image):# 图片原始形状shape image…

计算机视觉:人脸识别与检测

目录 前言 识别检测方法 本文方法 项目解析 完整代码及效果展示 前言 人脸识别作为一种生物特征识别技术&#xff0c;具有非侵扰性、非接触性、友好性和便捷性等优点。人脸识别通用的流程主要包括人脸检测、人脸裁剪、人脸校正、特征提取和人脸识别。人脸检测是从获取的图…

拼多多百亿补贴商品详情API接口系列

拼多多API接口是拼多多网提供的一种应用程序接口&#xff0c;允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口&#xff0c;开发者可以开发各种应用程序&#xff0c;如店铺管理工具、数据分析工具、购物比价工具等。在本章中&#xff0c;我们将介绍拼多多API接…

wpf devexpress 开始点

此教程示范如何创建registration form和DevExpress WPF Data Editors 开始点 此项目源码 这个解决方案包含几个项目-每一个项目对应一个教程 RegistrationForm.BaseProject项目是基于工作的解决方案。项目包含三个视图&#xff1a;MainView&#xff0c;RegistraionView&…

milvus数据库的数据管理-插入数据

一、插入数据 1.准备数据 数据必须与数据库中定义的字段元数据一致&#xff0c;与集合的模式匹配 import random data [[i for i in range(2000)],[str(i) for i in range(2000)],[i for i in range(10000, 12000)],[[random.random() for _ in range(2)] for _ in range(2…

安装最新版IntelliJ IDEA来开发Java应用程序

安装最新版IntelliJ IDEA来开发Java应用程序 Install the Latest Version of IntelliJ IDEA to Develop Java Applications 本文简要介绍如何安装配置JetBrains IntelliJ IDEA集成开发环境&#xff0c;从而开发Java应用程序&#xff1b;文中侧重实际操作和编程步骤&#xff0…