字符串编程练习(C++)

news2024/11/25 2:38:02

ex1 字符串变形

描述

对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1≤n≤10^{6} , 字符串中包括大写英文字母、小写英文字母、空格。

进阶:空间复杂度 O(n) , 时间复杂度 O(n)

输入描述:

给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^{6})

返回值描述:

请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

 思路描述

这个题目对字符串的要求有两个:

1.字母的大小写互换

可以通过将字符s进行s-'a'+'A'将小写字母s变成大写字母,通过s-'A'+'a'将大写字母s变成小写字母

for(int i=0;i<n;i++){
    if(s[i]<='Z'&&s[i]>='A')//大写变小写
        res+=s[i]-'A'+'a';
    else if(s[i]>='a'&&s[i]<='z')//小写变大写
        res+=s[i]-'a'+'A';
    else res+=s[i];//空格照抄
}

2.字母内部单词反序

可以借助C++逆序函数reverse()分两步操作:

首先将整个字符串逆序,如:可将as bc变成cb sa;

然后进行对操作后的字符串,再进行以空格为分隔单位的逆序,如:可将cb sa变成bc as;

那么首先就是把每一个单词“认出来”,如认出“cb","sa",可通过一个for循环把字符串的初始位置记录下来,然后通过一个while循环找到单词的终点位置,即空格之前。

for(int i=0;i<n;i++){
    int j=i;//二次反转的起始位置
    while(j<n&&res[j]!=' ')//二次反转的终止位置
        j++;
    reverse(res.begin()+i, res.begin()+j);//二次反转
    i=j;
}

参考代码

#include <algorithm>
#include <string>
class Solution {
public:
   
    string trans(string s, int n) {
        // write code here
        if(n==0)
            return s;
        string res;
        for(int i=0;i<n;i++){
            if(s[i]<='Z'&&s[i]>='A')//大写变小写
                res+=s[i]-'A'+'a';
            else if(s[i]>='a'&&s[i]<='z')//小写变大写
                res+=s[i]-'a'+'A';
            else res+=s[i];//空格照抄
        }
        reverse(res.begin(),res.end());//整个反转
        for(int i=0;i<n;i++){
            int j=i;//二次反转的起始位置
            while(j<n&&res[j]!=' ')//二次反转的终止位置
                j++;
            reverse(res.begin()+i, res.begin()+j);//二次反转
            i=j;
        }
        return res;

    }
};

ex2 最长公共前缀

描述

给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。

数据范围: 0≤n≤5000, 0≤len(​strs_{i})≤5000

进阶:空间复杂度 O(1),时间复杂度 O(n∗len)

示例

思路介绍

纵向遍历 

从第一个字符串开始,拿第一个字符串的第一个字符和下面的每一个字符串相比较,如果这一列字符都相同就接着比较第二列字符,一直到找到不同的字符或者是某一组字符串已经走到头为止。

for(int i=0;i<strs[0].size();i++){//比较第一个字符串的每一个字符
    for(int j=1;j<strs.size();j++){//纵向比较字符串
        if(strs[0][i]!=strs[j][i]||i==strs[j].size()){//比较后面的每一个字符串
            return strs[0].substr(0,i);//若字符不相同或者长度为最小则返回最长公共前缀
        }
    }
}

这里需要用到字符串分割函数substr(),该函数语法如下:

string substr (size_t pos, size_t len) const;

其中,pos表示要截取的子字符串的起始位置,len表示要截取的子字符串的长度。

还有一些其他的格式:

substr(string str, int a, int b);

str 是需要截取的字符串
a 截取字符串的开始位置
b 要截取的字符串的长度

substr(string str, int a) ;

a 可以理解为从第a个字符开始截取后面所有的字符串。

s.substr(pos, n)

返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾

代码参考

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        // write code here
        if(strs.size()==0)return "";//空串返回空值
        for(int i=0;i<strs[0].size();i++){//比较第一个字符串的每一个字符
            for(int j=1;j<strs.size();j++){//纵向比较字符串
                if(strs[0][i]!=strs[j][i]||i==strs[j].size()){//比较后面的每一个字符串
                    return strs[0].substr(0,i);//若字符不相同或者长度为最小则返回最长公共前缀
                }
            }
        }
        return strs[0];
    }
};

题目来源:

最长公共前缀_牛客题霸_牛客网 

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

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

相关文章

【java】IntelliJ IDEA创建helloworld

目录 一、安装jdk17 二、安装InterliJ IDEA 2023.1.4 三、创建项目 四、创建模块 五、创建包 六、创建类 七、开始hello world 7.1 输入 psvm 7.2 输入sout 八、运行 九、IDEA 设置 9.1 主题 9.2 字体 9.3 背景色 十、快捷键 十一、导入模块 11.1方式一 1、先…

如何在无人机支持下完成自然灾害风险评估的原理和方法

对灾害的损失进行估算与测算是制定防灾、抗灾、救灾 及灾后重建方案的重要依据。 自然灾害评估按灾害客观地发展过程可分三种&#xff1a;一是灾前预评估&#xff0c;二是灾期跟踪或监测性评估&#xff0c;三是灾后实测评估。 灾前预评估要考虑三个因素&#xff0c;第一是未来…

将 QtPropertyBrowser 加入到 vs2015 qt版中工程中

我是直接将QtPropertyBrowser的所有文件当子文件夹全部加入到工程里的 加完之后&#xff0c;ok&#xff0c;编译错误 出现一堆以下错误&#xff0c;我只拿出一条 moc_qtbuttonpropertybrowser.cpp(94): error C2027: 使用了未定义类型“QtButtonPropertyBrowserPrivate” 然…

二级市场负重前行?腾讯音乐的“新伤”与“旧患”

炎炎夏日的7月&#xff0c;于腾讯音乐&#xff08;NYSE:TME、HK:01698&#xff09;而言并不太平。 先是&#xff0c;在7月5日&#xff0c;企鹅FM发布官方公告称由于业务调整&#xff0c;将于9月6日正式停止运营。 仅过十二天&#xff0c;7月17日&#xff0c;腾讯音乐发布公告&…

【Vue】报错:this.$refs 引用子组件报错 is not a function

文章目录 报错信息解决方法 报错信息 this.$refs.selectTree.onHide is not a function 解决方法 确保组件成功导出并挂载&#xff1a; - 子组件需要 import,import 是请确保路径正确import selectTree from /components/select-tree; - import 之后还需要在父组件的 comp…

ES6新增运算符

?. 可选链运算符 一个对象的属性&#xff0c;如果这个属性是对象&#xff0c;它还有子属性&#xff0c;访问这个子属性&#xff0c;比如 var obj {a: {key: val}} console.log(obj.a.key) // val 如果属性不存在的时候&#xff0c;则有可能会报错。 var obj {key: val} c…

预处理详解(一)---预定义符号

文章目录 预定义符号预定义符号的使用 预定义符号 在C语言中&#xff0c;有一些有意思的预定义符号&#xff0c;这些预定义符号都是语言内置的&#xff0c;即以及定义好的&#xff0c;我们可以直接使用。预定义符号主要有以下几个&#xff1a; __FILE__ //进行编译的源…

Windows安装激活注意事项

选择语言、版本&#xff08;Windows 10指的是专业版本&#xff09;和体系结构&#xff08;32位/64位&#xff09;&#xff0c;这里自行根据情况选择&#xff08;如果机器预装的是Windows 10家庭中文版则选择家庭中文版&#xff0c;如果预装的是专业版则选择Windows 10。这样原先…

vue(html,css,vue2,vue3) 学习总结

文章目录 小白 Vue 3 学习一些名词软件安装 VSCode 中的一些设置1. 关闭eslint检查tsconfig.json 配置文件2. ts 文件引用报红 相对路径写法常见图片格式和区别目录结构JS/TS1. prototype(原型对象)2. 导入/导出3. 去除字符串两端空格4. 一些特殊语法糖5. 深拷贝6. 拼接两个数组…

openGauss学习笔记-14 openGauss 简单数据管理-查看对象

文章目录 openGauss学习笔记-14 openGauss 简单数据管理-查看对象14.1 查看命令帮助信息14.2 切换数据库14.3 查询所有数据库14.4 查询当前数据库中的所有表14.5 查看表结构 openGauss学习笔记-14 openGauss 简单数据管理-查看对象 gsql工具提供了若干高级特性&#xff0c;便于…

Linux 漏洞扫描

Linux 漏洞扫描程序会仔细检查基于 Linux 的系统&#xff0c;以减轻潜在的风险和漏洞。 什么是 Linux 漏洞扫描程序 Linux 漏洞扫描程序是一种专门的漏洞扫描工具&#xff0c;旨在识别基于 Linux 的系统中的安全漏洞和弱点,它会扫描配置错误、过时的软件版本和已知漏洞。 为…

UG\NX二次开发 捕获NX OPEN C++异常,乱码问题

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 捕获NX OPEN C++异常,乱码问题。 效果: 使用uc1601(ex.what(),1)显示乱码 使用 NXMessageBox()->Show("Block Styler", NXMessageBox::DialogTypeError, ex…

Selenium(3 + 4 超级详细笔记)

文章目录 selenium&#xff08;web自动化测试&#xff09;1. selenium初始化&#xff08;2种&#xff09;2. chrome 启动参数&#xff08;3种&#xff09;3. 八大定位方式3.1 css 定位3.2 xpath 定位3.3 link_text 定位3.4 partial_link_text 定位3.5 relative 相对定位 4. 添加…

uniapp动态获取列表中每个下标的高度赋值给另一个数组(完整代码附效果图)

uniapp实现动态获取列表中每个下标的高度&#xff0c;赋值给另一个数组。 先看效果图&#xff1a; 完整代码&#xff1a; <template><div class""><div class"">我是A列表&#xff0c;我的高度不是固定的</div><div class&qu…

DDOS百科:什么是 DDoS 攻击及如何防护DDOS攻击

一、什么是 DDoS 攻击&#xff1f; 当多台机器一起攻击一个目标&#xff0c;通过大量互联网流量淹没目标或其周围基础设施&#xff0c;从而破坏目标服务器、服务或网络的正常流量时&#xff0c;就会发生分布式拒绝服务(DDoS)攻击。 DDoS允许向目标发送指数级更多的请求&#…

Revit 导出明细表的两种方法!

方法一、Revit中怎么灵活运用明细表格式的导出与导入 在做项目的时候&#xff0c;遇到一些项目需要进行工程量统计的时候&#xff0c;经常需要设置明细表里面的格式&#xff0c;例如字体、表格排布样式等&#xff0c;但是项目一旦多起来&#xff0c;这些工作重复性又太高&#…

云计算和云架构是什么 有什么用途?

云计算是一种基于互联网的计算方式&#xff0c;它通过网络将计算资源(如计算能力、存储、网络带宽等)以服务的形式提供给用户&#xff0c;并允许用户根据需求进行灵活的资源调配和管理。云计算通常分为三个层次&#xff0c;即基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服…

如何快速爬取国内985大学学术学报pdf文件

背景 最近&#xff0c;在爬取关于国内985大学的学报时&#xff0c;我注意到大部分大学学报站点格式都采用相似的形式&#xff0c;并且PDF链接都使用自增的ID。然而&#xff0c;我也发现了一个问题&#xff0c;即大多数PDF链接的ID并不是连续的。现在我将向你分享一些方法&…

图采样、随机游走、subgraph的实现

诸神缄默不语-个人CSDN博文目录 本博文主要关注如何用代码实现图采样、随机游走、subgraph&#xff08;为什么这些东西放在一起写&#xff0c;我感觉还蛮直觉的&#xff09;。 随机游走和subgraph我之前都写过不少博文了&#xff0c;可以参考↑ 这个主要是我前年还在干GNN时候…

AtcoderABC247场

A - Move RightA - Move Right 题目大意 要求判断在一行4个方块上的人进行向右移动后&#xff0c;是否每个方块上都有人。初始状态下&#xff0c;给定一个由0和1组成的长度为4的字符串S&#xff0c;其中1表示对应方块上有人&#xff0c;0表示没有人。每个人同时向右移动一格&a…