【笔试常见编程题03】统计回文、连续最大和、不要二、把字符串转换成整数

在这里插入图片描述

1. 统计回文

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。

例如:
A = “aba”,B = “b”。这里有4种把B插入A的办法:

  • 在A的第一个字母之前: “baba” 不是回文
  • 在第一个字母‘a’之后: “abba” 是回文
  • 在字母‘b’之后: “abba” 是回文
  • 在第二个字母’a’之后 “abab” 不是回文

所以满足条件的答案为2
输入描述
每组输入数据共两行。 第一行为字符串A 第二行为字符串B 字符串长度均小于100且只包含小写字母
输出描述
输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数
示例 1
输入
aba
b
输出
2

思路1:暴力求解
在每个字符的前面插入另一个字符串
判断是否是回文
判断方法:前后双指针,指向头和尾
如果一样,一个++,一个- -

bool JudgePal(string s1) // 判断是否为回文
{
    int front = 0;
    int tail = s1.size() - 1;
    while (front < tail)
    {
        if (s1[front] == s1[tail])
        {
            front++;
            tail--;
        }
        else return false;
    }
    return true;
}

int main() {
    string s1, s2;
    getline(cin, s1);
    getline(cin, s2);
    int count = 0;
    for (int i = 0; i <= s1.size(); i++)
    {
        string temp = s1;
        temp.insert(i, s2);
        if (JudgePal(temp))
            count++;
    }
    cout << count;

    return 0;
}

2. 连续最大和

一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
输入描述
输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。
输出描述
所有连续子数组中和最大的值。
示例 1
输入
3
-1 2 1
输出
3

思路1:暴力求解

  1. 双循环求所有子数组的和
  2. 如果比int max大,更新max

时间复杂度 O ( N 2 ) O(N^2) O(N2)
在刷题软件上,如果数组元素过长
则会超出时间限制

int main() {
    size_t n;
    cin >> n;
    vector<int> v;
    v.resize(n);
    for (int i = 0; i < v.size(); i++) {
        cin >> v[i];
    }
    int max = v[0];
    for (int i = 1; i < v.size(); i++) {
        int temp = 0;
        for (int j = i; j < v.size(); j++)
        {
            temp += v[j];
            if (temp > max)
                max = temp;
        }
    }
    cout << max;
    return 0;
}

思路2:dp

dp[i]是以数组下标为 i 的数作为结尾的最大子序列和,注意是以 i 为结尾
比如说现在有一个数组 {6,-3,-2,7,-15,1,2,2}
dp[2]就是以-2为结尾的,那么显然dp[2]的最大值就是1(6,-3,-2)
dp[3]要以7结尾,那么以7结尾的子序列最大和就是8(6,-3,-2,7)
求dp[i]有两种可能
第一种就是像上面的dp[3]一样,dp[2]求出来是1了,dp[2]加上array[3]比dp[2]大
把dp[2]加上array[3]赋给dp
第二种可能就是说如果dp[2]求出来是-100,dp[2]+array[3]是-93
这时候dp[2]反而拖垮了array[3],array[3]就是最大子序列,把array[3]赋给dp

时间复杂度 O ( N ) O(N) O(N)
空间复杂度 O ( 1 ) O(1) O(1)

int main()
{
    size_t n;
    cin >> n;
    vector<int> v;
    v.resize(n);
    for (int i = 0; i < v.size(); i++) {
        cin >> v[i];
    }
    int dp = v[0];
    int maxsum = v[0];
    for (int i = 1; i < v.size(); i++)
    {
        dp = max(dp + v[i], v[i]);
        maxsum = max(dp, maxsum);
    }
    cout << maxsum;
    return 0;
}

3. 不要二

二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
输入描述
每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)
输出描述
输出一个最多可以放的蛋糕数
示例 1
输入
3 2
输出
4

思路1:
欧几里和距离就是最短直线距离
如果是求斜线距离涉及到勾股定理
比如:坐标(x2, y2)和(x1, y1)的距离
就是一条斜线距离
x1到x2的距离为1,y1到y2的距离也为1
1的平方加1的平方的算术平方根就是斜线距离
在这里插入图片描述
斜线距离是一定不为2的
所以只需要考虑横纵为2的距离不能放蛋糕
如图所示
横排第一和二个格子放蛋糕
第三和四就不能放蛋糕
竖排也是一样
在这里插入图片描述
第一排前两个格子是一定能放蛋糕的
第二排也是,放蛋糕是占先手的
也就是说放蛋糕的数量一定大于等于总格子的一半
如果横纵乘积模4为0,放蛋糕的数量就是横纵乘积除2
如果横纵乘积模4不为0,则需要看横和纵分别能不能整除2
如果能:放蛋糕数量 = 横纵乘积 + 2
如果不能:放蛋糕数量 = 横纵乘积 + 1

int main() {
    int W, H;
    cin >> W >> H;
    cout << W*H/2 + (!(W*H%4) ? 0 : (W % 2 == 0 && H % 2 == 0 ? 2 : 1));

    return 0;
}

4. 把字符串转换成整数

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
数据范围:字符串长度满足
进阶:空间复杂度 ,时间复杂度
注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。
示例 1
输入
“+2147483647”
输出
2147483647
示例 2
输入
“1a33”
输出
0

思路1:

  1. 首先判断第一个字符
  2. 然后遍历字符串转换成数字加到num

转换出的整数可能超出整型能存储的最大值
需要判断一下
代码1从字符串最后往前取字符
加到num里面,代码有些难理解

class Solution {
public:
    int StrToInt(string str) {
        long long num = 0; 
        int i = str.size() - 1;
        if ((str[0] < '0' || str[0] > '9') && (str[0] != '-' && str[0] != '+'))
            return 0;
        int power = 0;
        while (i >= 0)
        {
            if (str[i] >= '0' && str[i] <= '9')
                num += (str[i--] - '0') * pow(10, power++);
            else if (i == 0 && (str[i] == '-' || str[i] == '+'))
                break;
            else if (num > 0x7fffffff || str[i] < '0' || str[i] > '9') // 字符串转换出的整型可能超出了整形能存储的最大值,所以需要判断一下
                return 0;
        }
        if (str[0] == '-')
            return -num;
         return num;  
    }
};

代码2从字符串第一个字符往后取字符
加到num里面

class Solution {
public:
    int StrToInt(string str) {
        long long num = 0; 
        int i = 0;
        if (str[0] == '-' || str[0] == '+')
            i++;
        while (i < str.size()){
            if (str[i] >= '0' && str[i] <= '9')
                num = num * 10 + (str[i++] - '0');
            else if (num > 0x7fffffff || str[i] < '0' || str[i] > '9') // 字符串转换出的整型可能超出了整形能存储的最大值,所以需要判断一下
                return 0;
        }
        if (str[0] == '-')
            return -num;
         return num;  
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新手也能轻松上手!10 款免费平面图设计软件推荐!

从事设计行业的工人或多或少会接触到平面图。例如&#xff0c;在建造新房、办公室、酒店等任何类型的建筑时&#xff0c;都需要使用平面图来保证项目的准确性。因此&#xff0c;掌握绘制平面图软件的技巧也非常重要。在保证效率的同时&#xff0c;结果的准确性也非常高。在本文…

【CMU-自主导航与规划】M-TARE planner 配置与运行

M-TARE docker M-TARE 源码 一、依赖 Docker, Docker Compose, NVIDIA Container Toolkit, Nvidia GPU Driver&#xff08;需要至少2个&#xff0c;带Nvidia GPU&#xff09; 1.1 Docker docker -v #查询版本1.2 Docker Compose docker compose version1.3 …

jrt运维命令改造

以前发布网站都是定死网站放置路径的&#xff0c;现在JRT想面向更广范围推广&#xff0c;所以就不能明确确定网站放置目录&#xff0c;为此需要改造一下jrt命令和sh来满足目录不确定情况和多个程序用不同管理命令的要求。 以前是写死的&#xff0c;现在改为调程序运行目录的sh…

Dubbo 3.x源码(16)—Dubbo服务发布导出源码(5)

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo 3.x源码(15)—Dubbo服务发布导出源码(4)&#xff0c;也就是Dubbo远程服务导出export方法的上半部分&#xff0c;也就是doLocalExport源码&#xff0c;将会得到一个Exporter。 现在我们…

C++类和对象引入以及类的介绍使用

文章目录 一、面向过程和面向对象的初步认识二、类的引入2.2 类的引入 三、类的访问限定符及封装3.3 访问限定符3.4 【面试题】C中struct和class的区别3.5 类的两种定义方式 四、封装【面试题】面向对象的三大特性 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储…

(Sping Xml方式整合第三方框架)学习Spring的第十天

Spring整合mybatis 1 . 导入Mybatis整合Spring的相关坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.13.RELEASE</version></dependency><dependency><…

基于springboot网上图书商城源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括网上图书商城的网络应用&#xff0c;在外国网上图书商城已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。网上图书商城具有网上图书信息管理功能的选择…

新建VM虚拟机-安装centOS7-连接finalshell调试

原文 这里有问题 首先进入/etc/sysconfig/network-scripts/目录 cd /etc/sysconfig/network-scripts/ 然后编辑文件 ifcfg-ens33 vi ifcfg-ens33

探索数字经济:从基础到前沿的奇妙旅程

新一轮技术革命方兴未艾&#xff0c;特别是以人工智能、大数据、物联网等为代表的数字技术革命&#xff0c;催生了一系列新技术、新产业、新模式&#xff0c;深刻改变着世界经济面貌。数字经济已成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。预估到20…

OpenCV 5 - 图像混合处理addWeighted()

图像混合 1 理论-线性混合操作 其中α的取值范围为0~1之间,表示图像的所占的权重 2 混合处理函数addWeighted() 3 代码示例 Mat src1, src2, dst;src1 = imread("./1.png");src2 = imread("./2.png");if (!src1.data && src2.empty()) //判断图片…

word文档怎么做成翻页电子书

随着科技的进步&#xff0c;电子书已成为越来越多人阅读的首选。翻页电子书以其独特的翻页效果和丰富的互动功能&#xff0c;更是受到了广大读者的喜爱。那么&#xff0c;如何将传统的Word文档制作成翻页电子书呢&#xff1f; 一、了解翻页电子书的特点 翻页电子书&#xff0c…

鸿蒙开发【分布式任务调度】解析

鸿蒙OS 分布式任务调度概述 在 HarmonyO S中&#xff0c;分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统一的组件管理能力&#xff0c;为应用定义统一的能力基线、接口形式、数据结构、服务描述语言&#xff0c;屏蔽硬件差异&#xff1b;支持远程启…

成功解决IndexError: index 0 is out of bounds for axis 1 with size 0.

成功解决IndexError: index 0 is out of bounds for axis 1 with size 0. &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;报错分析及解决方案&#x1f333;&#x1f333;参考文章&#x1f333;&#x1f333;结尾&#x1f333; &#x1f333;…

Codeforces Round 921 (Div. 2)补题

We Got Everything Covered!&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;要求找出一个长度最短的字符串&#xff0c;满足任意由前k个字母组成的长度为n的字符串都是它的子序列。输出字符串。 思路&#xff1a;这道题我本来想的很简单&#xff0c;…

仅使用 Python 创建的 Web 应用程序(前端版本)第10章_订单列表

本章我们将实现订单列表页面。 完成后的图像如下。 创建过程与之前相同,如下。 No分类内容1Model创建继承BaseDataModel的数据类Order、OrderDetail2Service创建一个 OrderAPIClient3Page定义PageId并创建继承自BasePage的页面类4Application将页面 ID 和页面类对添加到 Mult…

第五季特别篇:一夜杯、游戏之宴 2017.04.26

第五季特别篇&#xff1a;一夜杯、游戏之宴 2017.04.26 OVA 第1话&#xff1a;一夜酒杯 / 一夜杯OVA 第2话&#xff1a;游戏之宴 / 遊戯の宴 OVA 第1话&#xff1a;一夜酒杯 / 一夜杯 遭到独角妖袭击的妖怪夫妇日土和初菜被夏目所救&#xff0c;这对妖怪夫妇制作的酒杯&#xf…

【服务器APP】利用HBuilder X把网页打包成APP

目录 &#x1f33a;1. 概述 &#x1f33c;1.1 新建项目 &#x1f33c;1.2 基础配置 &#x1f33c;1.3 图标配置 &#x1f33c;1.4 启动界面配置 &#x1f33c;1.5 模块配置 &#x1f33c;1.6 打包成APP &#x1f33a;1. 概述 探讨如何将网页转化为APP&#xff0c;这似乎…

LeetCode 热题 100 | 矩阵

目录 1 73. 矩阵置零 2 54. 螺旋矩阵 3 48. 旋转图像 4 240. 搜索二维矩阵 II 菜鸟做题第二周&#xff0c;语言是 C 1 73. 矩阵置零 解题思路&#xff1a; 遍历矩阵&#xff0c;寻找等于 0 的元素&#xff0c;记录对应的行和列将被记录的行的元素全部置 0将被记录的…

SOME/IP 协议介绍(七)传输 CAN 和 FlexRay 帧

SOME/IP 不应仅用于传输 CAN 或 FlexRay 帧。但是&#xff0c;消息 ID 空间需要在两种用例之间进行协调。 传输 CAN/FlexRay 应使用完整的 SOME/IP 标头。 AUTOSAR Socket-Adapter 使用消息 ID 和长度来构建所需的内部 PDU&#xff0c;但不会查看其他字段。因此&#xff0c;必…

「效果图渲染」如何使用VRay渲染逼真的物理模型

使用V-Ray渲染出逼真的物理模型首先要注重材质和光照的真实性。精细调整材质属性&#xff0c;如反射、透明度和质感&#xff0c;确保它们与现实世界中物质的特性相一致。接下来&#xff0c;布置合适的光源&#xff0c;模拟自然光线的行为&#xff0c;创建真实的光影效果。通过这…