字符串倒序输出

近期面试有这样一个问题,给定一个字符串,将其倒序输出,这种问题乍一看很好处理,但是实际在写的时候不知道怎么写了,有思路,但是没写出来。记录一下。

字符串反转实现的方式有多种,本质思想是将两端的数据进行对调,这个需要关系到二分法。

计算字符串总长度对半从前往后或者从后往前进行字符串反转都可以。看很多源码里是从后往前处理。

还可以通过数据结构中的栈实现,因为栈是后进先出(Last In First Out,LIFO)的数据结构,对于字符串倒序输出,正好符合这个要求。

下面以 java 为例进行说明

public class StringReverse {public static void reverse(String str) {char[] array = str.toCharArray();int length = array.length - 1;// 取中间值int half = array.length >> 1;// way1(array, length, half);// way2(array, length, half);// array = way3(array, length);// array = way4(array);array = way5(array, length);System.out.println(new String(array));}/*** 两数交换** @param array* @param length* @param half*/public static void way1(char[] array, int length, int half) {for (int i = 0; i < half; i++) {char t = array[length - i];array[length - i] = array[i];array[i] = t;}}/*** 异或方式交换** @param array* @param length* @param half*/public static void way2(char[] array, int length, int half) {for (int i = 0; i < half; i++) {array[length - i] ^= array[i];array[i] ^= array[length - i];array[length - i] ^= array[i];}}/*** 数组倒序拼接** @param array* @param length* @return*/public static char[] way3(char[] array, int length) {StringBuffer temp = new StringBuffer();for (int i = length; i >= 0; i--) {temp.append(array[i]);}array = temp.toString().toCharArray();return array;}/*** 通过 StringBuffer 调用 AbstractStringBuilder 的 reverse() 实现倒序** @param array* @return*/public static char[] way4(char[] array) {StringBuffer temp = new StringBuffer();array = temp.append(array).reverse().toString().toCharArray();return array;}/*** 通过 String 的 charAt() 倒序拼接** @param array* @param length* @return*/public static char[] way5(char[] array, int length) {String s = new String(array);StringBuffer temp = new StringBuffer();for (int i = length; i >= 0; i--) {temp.append(s.charAt(i));}array = temp.toString().toCharArray();return array;}public static void main(String[] args) {reverse("1234");}
}

对于面试中遇到的问题,一般是考察算法类的,对应代码里的第一种和第二种,那种内部封装的一般情况下不会问这个。

java 语言的好处是很多地方给开发人员封装了,带来的坏处是不思考这些底层问题了,在遇到一些问题的时候棘手。

https://www.cnblogs.com/taich-flute/p/10070143.html

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

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

相关文章

HTML动态房屋装饰特效

下面是代码&#xff1a; <!DOCTYPE html> <html lang"en" ><head><meta charset"UTF-8"><title>HTML5房屋装饰工具DEMO演示</title><link rel"stylesheet" href"css/style.css"></he…

数字化金融时代:探讨全球金融科技创新的最新动态

在当今数字化金融时代&#xff0c;金融科技创新如影随形&#xff0c;迅猛发展。本文将深入探讨全球范围内金融科技的最新动态&#xff0c;剖析各地新兴趋势与突破。从区块链技术的应用到人工智能在金融领域的崭露头角&#xff0c;我们将一一解读这个正在不断演变的金融科技画卷…

JavaScript 类型判断及类型转换规则

文章目录 JavaScript 类型及其判断使用 typeof 判断类型使用 instanceof 判断类型使用 constructor 和 Object.prototype.toString 判断类型JavaScript 类型及其转换JavaScript 函数参数传递cannot read property of undefined 问题解决方案分析一道网红题目JavaScript 类型判断…

Flutter轮播图Banner

使用插件&#xff1a;flutter_swiper 实现轮播图 pubspec.yaml 增加 &#xff1a;flutter_swiper : ^lastest_version 在项目文件夹下打开命令行执行&#xff1a;flutter packages get 安装插件 home_page.dart中使用swiper 程序运行:先启动虚拟设备后&#xff0c;执行命令f…

网络与系统安全期末复习

信息技术的发展趋势&#xff1a;融合、扩张、协作&#xff1b; 信息安全面临的挑战&#xff1a;隐私、身份、电子依赖、信任绑架、信息财富、边界模糊&#xff1b; 信息安全技术发展的四个阶段内在动力是什么&#xff1f; 保护技术&#xff1a;简单加密技术、存取控制技术、安…

算法训练 day24 | 77. 组合

77. 组合 题目链接:组合 视频讲解:带你学透回溯算法-组合问题 回溯其实和递归是密不可分的&#xff0c;解决回溯问题标准解法也是根据三部曲来进行的。 1、递归函数的返回值和参数 对于本题&#xff0c;我们需要用一个数组保存单个满足条件的组合&#xff0c;还需要另一个结果数…

【Qt5】QString的成员函数trimmed

2024年1月19日&#xff0c;周五下午 QString 的 trimmed 方法是用于移除字符串两端的空白字符&#xff08;空格、制表符、换行符等&#xff09;的方法。它返回一个新的字符串&#xff0c;该字符串是原始字符串去除两端空白后的结果。 下面是一个简单的示例&#xff1a; #incl…

开发语音产品时设计唤醒词和命令词的技巧

在实际开发语音产品过程中&#xff0c;要达到好的语音识别效果&#xff0c;除了语音算法要给力外&#xff0c;设计出好的唤醒词和命令词也能起到事倍功半的效果。所以下面介绍一下如何设计中文、英文和日文的唤醒词和命令词。 中文唤醒词设计 一般为4-6个字&#xff0c;4个字最…

setinel 阿里的限流方式

启动命令 java -jar sentinel-dashboard-1.8.1.jar --server.port8082 账号密码都是 sentinel 导入依赖 配置文件配置 spring:cloud:#限流sentinel:transport:#默认地址dashboard: localhost:8082 #配置security验证账号和密码security:user:name: adminpassword: admin #fe…

Nginx详细介绍(并从技术层面深度剖析)

nginx介绍 1.nginx 介绍2.nginx的优势3.Nginx VS Apache3.1.内核、语言、诞生时间比较3.2.功能比较3.3.Nginx 相对 apache 的优点 4.Nginx为什么有这么多的优势&#xff1f;4.1.IO多路复用&#xff08;I/O multiplexing【多并发】&#xff09;4.2.nginx的驱动模型介绍4.3.nginx…

初始js,js的变量

js起源 由布兰登&#xff0c;艾奇在1995年进行开发 JavaScript和ECMAScript的关系 ECMAScript &#xff08;简称“ES”&#xff09; 核心&#xff08; ECMAScript &#xff09;&#xff1a;提供语⾔的语法和基本对象 ⽂档对象模型&#xff08; DOM &#xff09;&#xff1…

削峰填谷与应用间解耦:分布式消息中间件在分布式环境下并发流量控制的应用

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;18&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;4&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 本篇重点讲清楚分布式消息中间件的特点&#xff0c;常见消息中间件…

MiniTab的相关性统计

相关概述 相关可以度量两个变量之间关联的强度和方向。可以在以下两种相关方法之间进行选择&#xff1a;Pearson 积矩相关和 Spearman 秩次相关。Pearson 相关&#xff08;又称为 r&#xff09;是最常见的方法&#xff0c;它度量两个连续变量之间的线性关系。 如果变量之间的…

通讯录项目的实现以及动态顺序表(基于顺序表)

首先我们要知道什么是顺序表: 顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝,顺序表分为静态顺序表(使⽤定⻓数组存储元素)和动态顺序表(按需申请) 静态顺序表缺点: 空间给少了不够⽤,给多了造成空间浪费 拿出来我之前以及写好了的顺序表的代码:…

SQL SERVER无法连接到服务器解决过程记录

很久没用sql server了&#xff0c;这几天打算更新SQL SERVER数据库&#xff1a;SQL看这一篇就看够了&#xff08;附详细代码及截图&#xff09; 这篇文章&#xff0c;发现连接不上服务器。 找一下解决办法。 一、打开服务界面 在键盘上按“WINR”快捷键&#xff0c;打开运行…

rust使用protobuf

前言 c,java,go 等直接是用 &#xff0c;具体就不说了&#xff0c;这章主要讲述rust 使用protobuf 这章主要讲述2种 1 > protoc protoc-gen-rust plugin 2> protoc prost-build 1&#xff1a;环境 win10 rustrover64 25-2 下载地址 https://github.com/protocolbu…

【DFS】695.岛屿的最大面积

题目 法1&#xff1a;DFS 最简单的DFS必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int maxAreaOfIsland(int[][] grid) {int m grid.length, n grid[0].length, ans 0;if (m 0 || n 0) {return ans;}boolean[][] visited new boolean[m][n]…

简单实用的恒温控制器

工作原理如下&#xff1a;ST是WTQ-288型电接点压力式温度计&#xff0c;当恒温箱内的温度降低到下限时&#xff0c;ST的指针与下限接点接触&#xff0c;双向可控硅通过R被强制触发导通&#xff0c;接通加热器RL的电源&#xff0c;于是恒温箱内温度上升。ST的指针转动&#xff0…

插入排序(一)——直接插入排序与希尔排序

目录 一.前言 二.排序的概念及其运用 1.1排序的概念 1.2 常用排序算法 三.常用排序算法的实现 3.1 插入排序 3.1.1 基本思想 3.1.2 直接插入排序 3.1.3 希尔排序&#xff08;缩小增量排序&#xff09; 四.全部代码 sort.c sort.h test.c 五.结语 一.前言 本文我们…

REPLACE INTO

简介 在数据库中&#xff0c;REPLACE INTO 是一种用于插入或更新数据的&#xff08;DML&#xff09; SQL 语句。它与 INSERT INTO 语句类似&#xff0c;但具有一些特殊的行为。 语法 REPLACE INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); repla…