2023年蓝桥杯C++A组第三题:更小的数(双指针暴力遍历解法)

题目描述

小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串,下标从 0 到 n − 1,你可以将其视作是一个具有 n 位的十进制数字 num,小蓝可以从 num 中选出一段连续的子串并将子串进行反转,最多反转一次。小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字 numnew 满足条件 numnew < num,请你帮他计算下一共有多少种不同的子串选择方案,只要两个子串在 num 中的位置不完全相同我们就视作是不同的方案。

注意,我们允许前导零的存在,即数字的最高位可以是 0 ,这是合法的。

解题思路

考虑将字符串用两层循环进行遍历,对于每一个子串,判断两头的数字大小,若右边比左边小,即为满足题意的子串,若右边和左边相等,则用双指针不断向中间靠拢进行比较,直到右边比左边小则方案加一或右边比左边大则该子串反转不满足题意。

附代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	string str;
	cin >> str;
	int count = 0;
	for (int i = 0; i < str.length(); i++) {
		for (int j = i + 1; j < str.length(); j++) {
			int l = i, r = j;
			while (l<r) {
				if (str[r] < str[l])
				{
					count++; break;
				}
				else if (str[r] > str[l])
					break;
				else {
					l++;
					r--;
				}
			}
		}
	}
	cout << count;
	return 0;
}
相关推荐
(Charon)13 小时前
【C++ 面试高频:STL 容器 vector、map、unordered_map 总结】
开发语言·c++·面试
我是一颗柠檬13 小时前
【Java项目技术亮点】滑动窗口限流算法
java·开发语言·算法
无限码力13 小时前
华为非AI方向笔试真题 - 楼内救人
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为算法题
一切皆是因缘际会13 小时前
隐层表征解构:LLM感知式幻觉稀疏成因
算法·数学建模·ai·架构
Irissgwe13 小时前
二叉树进阶
数据结构·c++·算法·c·二叉搜索树
无限码力13 小时前
华为非AI方向笔试真题 - 容器镜像平均大小统计
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为非ai笔试真题·华为0612非ai笔试真题
hairenwangmiao13 小时前
c++排序(第一章----桶排序与sort排序)
数据结构·c++·排序
郝学胜-神的一滴13 小时前
[简化版 GAMES 101] 计算机图形学 13:从光栅化到着色——赋予三维像素光影灵魂
c++·计算机视觉·unity·godot·图形渲染·opengl·unreal
无限码力13 小时前
华为非AI方向0612笔试真题-循环异或加密器(详细思路+多语言题解)
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为0612笔试真题
凌波粒13 小时前
LeetCode--1584. 连接所有点的最小费用(最小生成树/Prim算法/Kruskal算法)
算法·leetcode·职场和发展