当前位置: 首页 > news >正文

算法通关村第十二关|白银|字符串经典基础面试题

1.反转问题

1.1 反转字符串

原题:力扣344.

要求原地修改。

public void reverseString(char[] s) {if (s == null || s.length() == 0) {return;}int n = s.length;for (int left = 0, right = n - 1; left < right; left++, right--) {char temp = s[left];s[left] = s[right];s[right] = temp;}
}

1.2 K个一组反转

原题:力扣541.

public String reverseStr(String s, int k) {if (s == null || s.length() == 0) {return s;}int n = s.length();char[] arr = s.toCharArray();for (int i = 0; i < n; i += 2 * k) {reverse(arr, i, Math.min(i + k, n) - 1);}return new String(arr);
}
public void reverse(char[] arr, int left, int right) {while (left < right) {char temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}
}

1.3 仅仅反转字母

原题:力扣917.

1.转换为数组,使用双指针,两个都指向字母就互换位置,否则就移动不是指向字母的指针。

class Solution {public String reverseOnlyLetters(String s) {if (s == null || s.length() == 0) {return s;}int left = 0, right = s.length() - 1;char[] arr = s.toCharArray();while (left < right) {if (Character.isLetter(arr[left]) && Character.isLetter(arr[right])) {char temp =  arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;} else if (Character.isLetter(arr[left])) {right--;} else if (Character.isLetter(arr[right])) {left++;} else {left++;right--;}}return new String(arr);}
}

2.使用栈。

class Solution {public String reverseOnlyLetters(String s) {Stack<Character> letters = new Stack();for (char c : s.toCharArray()) {if (Character.isLetter(c)) {letters.push(c);}}StringBuilder ans = new StringBuilder();for (char c : s.toCharArray()) {if (Character.isLetter(c)) {ans.append(letters.pop());} else {ans.append(c);}}return ans.toString();}
}

3.维护一个指针从后向前遍历数组,需要字母的时候使用。

class Solution {public String reverseOnlyLetters(String s) {if (s == null || s.length() == 0) {return s;}StringBuilder ans = new StringBuilder();int j = s.length() - 1;for (int i = 0; i < s.length(); i++) {if (Character.isLetter(s.charAt(i))) {while (!Character.isLetter(s.charAt(j))) {j--;}ans.append(s.charAt(j--));} else {ans.append(s.charAt(i));}}return ans.toString();}
}

1.4 反转字符串里的单词

原题:力扣151.

1.调用API。

public String reverseWords(String s) {if (s == null || s.length() == 0) {return s;}s = s.trim();List<String> wordList = Arrays.asList(s.split("\\s+"));Collections.reverse(wordList);return String.join(" ", wordList);
}

2.自己实现。

class Solution {public String reverseWords(String s) {StringBuilder sb = trimSpaces(s);reverse(sb, 0, sb.length() - 1);reverseEachWord(sb);return sb.toString();}public StringBuilder trimSpaces(String s) {int left = 0, right = s.length() - 1;while (left <= right && s.charAt(left) == ' ') {left++;}while (left <= right && s.charAt(right) == ' ') {right--;}StringBuilder sb = new StringBuilder();while (left <= right) {char c = s.charAt(left);if (c != ' ') {sb.append(c);} else if (sb.charAt(sb.length() - 1) != ' ') {sb.append(c);}left++;}return sb;}// 将整个字符串进行翻转public void reverse(StringBuilder sb ,int left, int right) {while (left < right) {char temp = sb.charAt(left);// String 没有这个方法,但是 StringBuilder 和 StringBuffer 可以使用// 将指定索引处修改为指定的 char 类型值sb.setCharAt(left++, sb.charAt(right));sb.setCharAt(right--, temp);}}// 针对每个单词进行翻转public void reverseEachWord(StringBuilder sb) {int n = sb.length();int start = 0, end = 0;while (start < n) {while (end < n && sb.charAt(end) != ' ') {end++;}reverse(sb, start, end - 1);start = end + 1;end++;}}
}

2.验证回文串

原题:力扣125.

public boolean isPalindrome(String s) {if (s == null || s.length() == 0) {return s;}StringBuffer sgood = new StringBuffer();int length = s.length();for (int i = 0; i < length; i++) {char ch = s.charAt(i);if (Character.isLetterOrDigit(ch) {sgood.append(Character.toLowerCase(ch));}}int n = sgood.length();int left = 0, right = n - 1;while (left < right) {if (sgood.charAt(left) != sgood.charAt(right)) {return false;}left++;right--;}return true;
}

3.字符串中的第一个唯一字符

原题:力扣387.

public int firstUniqChar(String s) {if (s == null || s.length() == 0) {return 0;}Map<Character, Integer> frequency = new HashMap<>();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);frequency.put(ch, frequency.getOrDefault(ch, 0) + 1);}for (int i = 0; i < s.length(); i++) {if (frequency.get(s.charAt(i)) == 1) {return i;}}return -1;
}

4.判定是否互为字符重排

原题:力扣242.

只需要判断字符种类以及每个种类出现的次数是否相同,相同则可以重排。

public boolean checkPermutation(String s1, String s2) {if (s1.length() != s2.length()) {return false;}char[] s1Chars = s1.toCharArray();Map<Character, Integer> s1Map = getMap(s1);Map<Character, Integer> s2Map = getMap(s2);for (char s1Char : s1Chars) {if (!s2Map.containsKey(s1Char) || (int)s2Map.get(s1Char) != (int)s1Map.get(s1Char)) {return false;}}return true;
}public Map<Character, Integer> getMap(String str) {Map<Character, Integer> map = new HashMap<>();char[] chars = str.toCharArray();for (char aChar : chars) {map.put(aChar, map.getOrDefault(aChar, 0) + 1);}return map;
}

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤

相关文章:

算法通关村第十二关|白银|字符串经典基础面试题

1.反转问题 1.1 反转字符串 原题&#xff1a;力扣344. 要求原地修改。 public void reverseString(char[] s) {if (s null || s.length() 0) {return;}int n s.length;for (int left 0, right n - 1; left < right; left, right--) {char temp s[left];s[left] s…...

Spring框架学习 -- 读取和存储Bean对象

目录 &#x1f680;&#x1f680; 回顾 getBean()方法的使用 根据name来获取对象 再谈getBean() (1) 配置扫描路径 (2) 添加注解 ① spring注解简介 ② 对类注解的使用 ③ 注解Bean对象的命名问题 ④ 方法加Bean注解 (3) Bean 注解的重命名 (4) 获取Bean对象 -- …...

APM工具skywalking部署

一 整体架构 整个架构&#xff0c;分成上、下、左、右四部分&#xff1a; 上部分 Agent &#xff1a;负责从应用中&#xff0c;收集链路信息&#xff0c;发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是&…...

MFC打开可执行文件exe

CString exeName, propathdir;//propath _T("D:\\vs2017\\Project\\work\\mySqlselect\\release64\\mySqlselect.exe");//propathdir _T("D:\\vs2017\\Project\\work\\mySqlselect\\elease64\\");//路径太深的时候要指明文件所在路径&#xff0c;奇葩//p…...

css实现原生form表单label必填选项红色*样式,以及js控制必填校验

文章目录 一、css实现原生form表单label必填选项红色*样式&#xff0c;以及js控制必填校验&#xff1f;二、实现方案参考原文 一、css实现原生form表单label必填选项红色*样式&#xff0c;以及js控制必填校验&#xff1f; 二、实现方案 1.css实现原生form表单label必填选项红色…...

10_6 input输入子系统,流程解析

简单分层 应用层 内核层 --------------------------- input handler 数据处理层 driver/input/evdev.c1.和用户空间交互,实现fops2.不知道数据怎么得到的,但是可以把数据上传给用户--------------------------- input core层1.维护上面和下面的两个链表2.为上下两层提供接口--…...

竞赛选题 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题

文章目录 1 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的垃圾邮件分类 该项目…...

Web前端—移动Web第三天(移动Web基础、rem、less、综合案例—极速问诊)

版本说明 当前版本号[20231120]。 版本修改说明20231120初版 本课程的笔记已经更新完毕&#xff0c;各位可以通过点击《黑马程序员2023新版前端Web开发HTML5CSS3移动web视频教程&#xff0c;前端web入门首选》学习笔记总目录查看所有知识点&#xff0c;同时也能免费下载学习…...

MySQL--慢查询(一)

1. 查看慢查询日志是否开启 show variables like slow_query%; show variables like slow_query_log; 参数说明&#xff1a; 1、slow_query_log&#xff1a;这个参数设置为ON&#xff0c;可以捕获执行时间超过一定数值的SQL语句。 2、long_query_time&#xff1a;当SQL语句执行…...

【大神支招】3步,打造一张BI报表

随着BI报表的高效直观、灵活分析的特点越来越被大家所熟知&#xff0c;很多BI零基础的用户可积极尝试制作BI报表&#xff0c;以达到灵活自助分析、高效智能分析的效果。那么BI报表零基础的小白们该怎么做BI报表&#xff0c;才能又快又好地做出来&#xff1f; 大神支招&#xf…...

【Linux】文件操作

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;文件是什么&#xff1f;&am…...

(动手学习深度学习)第13章 实战kaggle竞赛:狗的品种识别

文章目录 1. 导入相关库2. 加载数据集3. 整理数据集4. 图像增广5. 读取数据6. 微调预训练模型7. 定义损失函数和评价损失函数9. 训练模型 1. 导入相关库 import os import torch import torchvision from torch import nn from d2l import torch as d2l2. 加载数据集 - 该数据…...

自定义注解+AOP

自定义注解与AOP&#xff08;面向切面编程&#xff09;的结合常常用于在应用程序中划定切面&#xff0c;以便在特定的方法或类上应用横切关注点。以下是一个简单的示例&#xff0c;演示了如何创建自定义注解&#xff0c;并使用Spring AOP来在被注解的方法上应用通知。 如何创建…...

Ribbon

在Spring Cloud中&#xff0c;Ribbon是一个用于客户端负载均衡的组件&#xff0c;它可以与其他服务发现组件&#xff08;例如Eureka&#xff09;集成&#xff0c;以提供更强大的负载均衡功能。Ribbon使得微服务架构中的客户端能够更加智能地调用其他服务的实例&#xff0c;从而…...

git -1

1.创建第一个仓库并配置local用户信息 git config git config --global 对当前用户所有仓库有效 git config --system 对系统所有登录的用户有效 git config --local 只对某个仓库有效 git config --list 显示配置 git config --list --global 所有仓库 git config --list…...

基于SSM+Vue的鲜花销售系统/网上花店系统

基于SSM的鲜花销售系统/网上花店系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 摘要 鲜花销售系统是一个基于SSM&#xff08;Spring …...

安卓:Android Studio4.0~2023中正确的打开Android Device Monitor

Android Studio4.0~2023 中如何正确的打开Android Device Monitor(亲测有效) 前些天买了新电脑&#xff0c;安装了新版本的Android Studio4.0想试一试&#xff0c;结果就出现了一些问题。 问题引出&#xff1a; Android Device Monitor在工具栏中找不到&#xff0c;后来上网查…...

装备制造企业设备远程运维平台的建设-天拓四方分享

设备远程运维平台是一种基于互联网和物联网技术的设备管理平台&#xff0c;可以实现设备的远程监控、故障诊断、预警维护等功能。近年来&#xff0c;随着云计算、大数据、人工智能等技术的不断发展&#xff0c;设备远程运维平台的智能化程度越来越高&#xff0c;传统的设备运维…...

群晖NAS搭建WebDav服务做文件共享,可随时随地远程访问

文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选框 2. 局域网测试WebDav服务2.1 下载RaiDrive客户端2.2 打开RaiDrive&#xff0c;设置界面语言可以选择中文2.3 点击添加按钮&#xff0c;新建虚拟驱动区2…...

c++调用Lua(table嵌套写法)

通过c调用lua接口将数据存储到虚拟栈中&#xff0c;就可以在lua脚本在虚拟栈中取得数据 c调用lua库&#xff0c;加载lua文件&#xff0c; lua_State* L;//定义一个全局变量***************************L luaL_newstate();luaL_openlibs(L);//打开Lua脚本文件std::string pat…...

vue-beauty最佳实践:企业级项目开发经验总结

vue-beauty最佳实践&#xff1a;企业级项目开发经验总结 【免费下载链接】vue-beauty Beautiful UI components build with vue and ant design 项目地址: https://gitcode.com/gh_mirrors/vu/vue-beauty vue-beauty是一套基于vue.js和ant-design样式的PC端UI组件库&…...

Henghao恒浩HH温度开关原厂一级代理分销经销

品牌 元件类别 型号 描述 包装 数量 恒浩 温度开关 H20 250V 5A 90℃ 100 5,000...

DJI M600 Pro + Sony A7RM2航拍农田,用Agisoft Metashape Pro 1.8生成高精度DOM/DEM全流程

DJI M600 Pro Sony A7RM2航测实战&#xff1a;从外业到内业的高精度DOM/DEM生成指南 农田测绘项目中&#xff0c;设备组合的选择往往决定了成果的精度上限。当使用像Sony A7RM2这样没有内置GPS记录功能的高分辨率相机搭配DJI M600 Pro无人机时&#xff0c;整个工作流需要特别关…...

xonsh:用Python语法编写Shell脚本,提升命令行工作效率

1. 项目概述&#xff1a;当Shell遇见Python如果你和我一样&#xff0c;日常在终端里敲敲打打&#xff0c;那么对Bash、Zsh这些Shell一定不陌生。它们强大&#xff0c;但也常常让人头疼——复杂的语法、晦涩的管道、还有那些为了完成一个简单任务而不得不写的冗长脚本。有没有一…...

避坑指南!新手学AI最容易踩的10个误区,90%的人都中招了

前言&#xff1a;AI入门的路上&#xff0c;比“学不会”更可怕的是“学错了”——很多新手抱着满腔热情开始学习&#xff0c;却因为踩了一个个误区&#xff0c;浪费了大量时间和精力&#xff0c;最后越学越懵&#xff0c;甚至放弃。今天这篇文章&#xff0c;结合CSDN上千名AI入…...

FPGA模块化固件框架设计与USB2高速传输优化

1. FPGA模块化固件框架设计解析在硬件加速领域&#xff0c;FPGA因其可重构特性成为高性能计算的关键载体。我们开发的模块化固件框架采用分层架构设计&#xff0c;核心由三个功能层构成&#xff1a;通信接口层&#xff1a;基于FTDI FT2232H芯片实现物理层USB2协议栈&#xff0c…...

守护孩子视力,这几款教育照明灯具值得关注

每每走进随便哪一所学校&#xff0c;教室里的灯光&#xff0c;常常是我们极易忽略&#xff0c;然而却又特别关键的细微之处。当那些孩子们在课桌上快速书写&#xff0c;头顶上方那一片光线的质量&#xff0c;正静静地对他们的视力健康以及学习效率产生着影响。近些年来&#xf…...

你的样本量够吗?WGCNA分析前必须搞清楚的5个关键问题与实战策略

WGCNA分析前的5个关键评估&#xff1a;如何避免无效分析并优化实验设计 当你第一次听说WGCNA这个强大的共表达网络分析工具时&#xff0c;可能已经迫不及待想在自己的数据集上尝试。但先别急着运行代码——我见过太多研究者因为前期准备不足&#xff0c;花费数周时间却得到毫无…...

提升文件管理效率的终极解决方案:QuickLook文件夹预览插件

提升文件管理效率的终极解决方案&#xff1a;QuickLook文件夹预览插件 【免费下载链接】QuickLook.Plugin.FolderViewer Folder viewer plugin for QuickLook 项目地址: https://gitcode.com/gh_mirrors/qu/QuickLook.Plugin.FolderViewer 在数字化工作环境中&#xff0…...

SAP ALV布局新玩法:除了cl_gui_docking_container,还有哪些容器控件能实现分屏?

SAP ALV分屏布局进阶指南&#xff1a;5种容器控件的深度对比与实战选型 在SAP ABAP开发中&#xff0c;ALV报表的分屏展示是提升用户体验的常见需求。许多开发者习惯性地使用cl_gui_docking_container实现上下分屏&#xff0c;但SAP GUI容器控件的生态远比这丰富。本文将带您探索…...