【算法】回文数索引、回文子串输出、整数反转

目录

回文数索引

思路:

 回文子串输出

思路


回文数索引

思路:

目标字母索引可能是一个或者是两个,返回任意的一个索引即可,如果已经是回文串则直接返回-1。

下面列出几种目标删除字母可能出现的位置:

我们可以先定义两个指针left和right,分别指向字符串的起始和末尾,while(left < right),如果该循环中没有str[left] != str[right],则直接返回-1;若有str[left] != str[right],则返回的索引就是此时的left或者right,可以看出上图中的情况二,left和right均为目标字母的索引。那其他情况怎么判断目标字母索引是left和right中的哪一个?我们可以进行一个简单的判断:if(str[left+1] == str[right])则目标字母索引就是left,否则就是right。

#include <iostream>
#include <string>
using namespace std;int grapIndex(const string& str)
{int left = 0,right = str.length()-1;while(left < right){if(str[left] != str[right]){if(str[left+1] == str[right])return left;elsereturn right;}++left;--right;}return -1;
}int main() {int cnt = 0;cin >> cnt;while(cnt--){string str;cin>>str;cout<< grapIndex(str) << endl;}return 0;
}

 回文子串输出

思路:

首先求出所有的回文子串,可以使用中心扩展算法、动态规划,由于要考虑到打印所有回文子串的顺序问题因此该题使用中心扩展算法会好一些。利用中心扩展思想求出所有回文子串后,将这些子串全部存入到一个vector<string> vv中,题目要求是子串长度小的优先输出,长度相同的按其在原字符串中出现位置靠左的先输出,我们可以使用map<int,vector<int>> mymap容器(自动排序),key表示子串的可能的长度,value代表长度相同的所有子串索引(vector<string> vv的索引)的数组集合。

#include <iostream>
#include <string>
#include <vector>
#include <map>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::vector;
using std::map;
void outputString()
{string s;cin >> s;//中心扩展思想int size = s.length();vector<string> vv;for (int i = 0;i < size;++i){int left = i, right = i;int len = 0;while (left >= 0 && right < size && s[left] == s[right]){len = right - left + 1;if (len >= 2)vv.push_back(s.substr(left, len));--left;++right;}left = i;right = i + 1;while (left >= 0 && right < size && s[left] == s[right]){len = right - left + 1;if (len >= 2)vv.push_back(s.substr(left, len));--left;++right;}}map<int,vector<int>> mymap;for (int i = 0;i < vv.size();++i){mymap[vv[i].size()].emplace_back(i);}for (const auto& e : mymap){if ((e.second).size() > 1){for (int i = 0;i < (e.second).size();++i)cout << vv[(e.second)[i]] << endl;continue;}cout << vv[(e.second)[0]] << endl;}
}
int main()
{outputString();return 0;
}

整数反转

思路:

int reverse(int x) {int res = 0;while(x){if(res > INT_MAX/10 || res < INT_MIN/10)return 0;int rev = x%10;res = res*10 + rev;x /= 10;}return res;}

该题是将一个32位有符号整数x进行反转,如果输入的x超过32位的有符号整数范围[-2^31,2^31-1],就返回0。那我们就从整数x的最后一位开始一位一位的重新拼成一个反转后的数字,如果想完成这样的操作必须使用%和/运算符,我们现在是要x的最后一位可以进行x%10,这样就可以的到x的最后一位(反转后的数的最高位,重复后面的操作可以得到反转后得数的次高位,次次高位),接下来x /= 10(更新x),如此重复直至当0 == x是退出循环,但是要保证反转后得到的数字res >= INT_MAX && res <= INT_MAX,因此我们要在while循环里给出这样一个条件:if(res > INT_MAX/10 || res < INT_MIN/10),为什么是/10为什么不除100或者是1000呢?我们假定现在限制的最大值是[-5157,5158],如果大于这个区间的数都会溢出,假定给定的x = -7555,如果不加判断条件,则反转后的整数就是-5557就会溢出,因此/10的作用:-555 < -515 条件成立则直接返回0;如果/100判断,假定x = -535,-53 < -51此时返回0的话就错了,明显-535没有超过我们规定的区间。

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

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

相关文章

MAC创建一个自动操作,启动系统【睡眠】功能,并将绑定快捷键

目的 通过 Automator 创建一个服务来启动系统【睡眠】这个功能&#xff0c;并绑定快捷键。 步骤一&#xff1a;创建 Automator 服务 打开 Automator&#xff1a; ○ 在 Spotlight 中搜索 Automator&#xff0c;然后打开。选择服务类型&#xff1a; ○ 在 Automator 的启动界…

ThinkPHP6门面(Facade)

门面 门面&#xff08;Facade&#xff09; 门面为容器中的&#xff08;动态&#xff09;类提供了一个静态调用接口&#xff0c;相比于传统的静态方法调用&#xff0c; 带来了更好的可测试性和扩展性&#xff0c;你可以为任何的非静态类库定义一个facade类。 系统已经为大部分…

1436:数列分段II -整型二分

1436&#xff1a;数列分段II 题目来源&#xff1a;一本通 【输入样例】 5 3 4 2 4 5 1【输出样例】 6题意 将数列分成若干段&#xff0c;最多M段&#xff0c;求这些段中最大值中的最小值。&#xff08;M<N是M的约束&#xff09; 思路 最大最小问题考虑二分。由于M越大&…

Linux-第1集-基础指令 pwd、cd……入门

欢迎来到Linux操作系统的世界&#xff0c;本集我会用最简单的语言给大家讲解最基础的指令。 首先我们要明确Linux是通过指令完成相应的操作&#xff0c; 由于Linux的用户都是行内人&#xff0c;所有我们在学习此操作系统时看到的都是指令界面&#xff0c;而非像Windows操作系…

Golang | Leetcode Golang题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; func nearestPalindromic(n string) string {m : len(n)candidates : []int{int(math.Pow10(m-1)) - 1, int(math.Pow10(m)) 1}selfPrefix, _ : strconv.Atoi(n[:(m1)/2])for _, x : range []int{selfPrefix - 1, selfPrefix, selfPrefix …

【最新鸿蒙应用开发】——合理使用自定义弹框

自定义弹窗选型 合理选择不同的系统能力实现弹窗&#xff0c;有利于提升应用开发效率&#xff0c;实现更好的功能需求&#xff0c;因此了解自定义弹窗的选型和差异非常重要。在应用开发中&#xff0c;为了选择出合适的弹窗选型&#xff0c;从使用场景上&#xff0c;需要重点关…

044 商品详情(异步编排)

文章目录 销售属性分组规格参数异步编排application.ymlMyThreadConfig.javaThreadPoolConfigProperties.javaSkuInfoServiceImpl.java 销售属性 sku表&#xff1a;tb_sku_info sku对应销售属性表&#xff1a;tb_sku_sale_attr_value 结果 在详情页系统中&#xff0c;切换属…

【热门主题】000054 ECMAScript:现代 Web 开发的核心语言

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…

进程优先级——Linux

目录 前言 查看系统进程 进程优先级的修改 Linux调度与切换 Cpu的进程切换 Linux实现调度的算法 前言 进程访问系统资源要排队等待&#xff0c;而cpu资源分配和执行的先后顺序&#xff0c;就是指进程的优先级。进程的优先级&#xff0c;保证了必要进程的执行。进程访问某…

11.18 Maven-SpringBootWeb入门

Maven 什么是maven? Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Apache 软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&#xff0c;也是一个专门为支持开源项目而生的非盈利性组织…

selenium元素定位校验以及遇到的元素操作问题记录

页面元素定位方法及校验 使用比较多的是通过id、class和xpath来对元素进行定位。在定位前可以现在浏览器验证是否可以找到指定的元素。这样就不用每添加一个元素定位都运行代码来检查定位方式表达式是否正确。 使用XPATH定位 在浏览器F12&#xff0c;找到元素&#xff0c;在元…

【UGUI】Unity 背包系统实现02:道具信息提示与显示

在游戏开发中&#xff0c;背包系统是一个常见的功能模块&#xff0c;用于管理玩家拾取的物品。本文将详细介绍如何在 Unity 中实现一个简单的背包系统&#xff0c;包括道具信息的提示和显示功能。我们将通过代码和场景搭建来逐步实现这一功能。 1. 功能需求清单 在实现背包系…

服务器上部署并启动 Go 语言框架 **GoZero** 的项目

要在服务器上部署并启动 Go 语言框架 **GoZero** 的项目&#xff0c;下面是一步步的操作指南&#xff1a; ### 1. 安装 Go 语言环境 首先&#xff0c;确保你的服务器上已安装 Go 语言。如果还没有安装&#xff0c;可以通过以下步骤进行安装&#xff1a; #### 1.1 安装 Go 语…

Node.js | Yarn下载安装与环境配置

一、安装Node.js Yarn 是 Node.js 下的包管理工具&#xff0c;因此想要使用 Yarn 就必须先下载 Node.js。 推荐参考&#xff1a;Node.js | npm下载安装及环境配置教程 二、Yarn安装 打开cmd&#xff0c;输入以下命令&#xff1a; npm install -g yarn检查是否安装成功&…

【Linux实践2】实验四:存储管理

文章目录 一、存储管理的目的1.1 内存空间的分配与回收1.2 地址转换1.3 内存保护1.4 内存共享1.5 内存扩充 二、可变分区存储管理2.1 分区结构体定义2.2 初始化分区链表 三、内存分配算法实现3.1 首次适应算法&#xff08;First Fit&#xff09;3.1.1 算法实现 3.2 循环首次适应…

linux 中mysql查看慢日志

1、到mysql容器&#xff0c;先登录到数据库&#xff0c;查看是否开启 mysql -h 127.0.0.1 -uroot -p SHOW VARIABLES LIKE slow_query_log; 2、如果没有开启&#xff0c;需要先开启 set global slow_query_log ON; 3、查看慢日志文件 SHOW VARIABLES LIKE slow_query_log…

微服务day09

DSL查询 快速入门 GET /items/_search {"query": {"match_all": {}} } 叶子查询 GET /items/_search {"query": {"match_all": {}} }GET /items/_search {"query": {"multi_match": {"query": "脱…

vue中el-select 模糊查询下拉两种方式

第一种&#xff1a;先获取所有下拉数据再模糊查询&#xff0c;效果如下 1&#xff0c;页面代码&#xff1a;speciesList是种类列表List, speciesId 是speciesList里面对应的id&#xff0c;filterable是过滤查询标签 <el-form-item label"种类" prop"species…

django启动项目报错解决办法

在启动此项目报错&#xff1a; 类似于&#xff1a; django.core.exceptions.ImproperlyConfigured: Requested setting EMOJI_IMG_TAG, but settings are not c启动方式选择django方式启动&#xff0c;以普通python方式启动会报错 2. 这句话提供了对遇到的错误的一个重要线索…

【Redis】Redis实现的消息队列

一、用list实现【这是数据类型所以支持持久化】 消息基于redis存储不会因为受jvm内存上限的限制&#xff0c;支持消息的有序性&#xff0c;基于redis的持久化机制&#xff0c;只支持单一消费者订阅&#xff0c;无法避免消息丢失。 二、用PubSub【这不是数据类型&#xff0c;是…