每日算法、面试题

news/2024/5/19 7:59:46/文章来源:https://blog.csdn.net/weixin_52574640/article/details/127349857

目录

2022/10/16

一、算法

翻转字符串里的单词

找出字符串中第一个匹配项的下标

二、面试题

SpringMvc中如何解决POST请求的中文乱码问题

SpringMvc的工作流程


2022/10/16

一、算法

翻转字符串里的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:
​
输入:s = "the sky is blue"
输出:"blue is sky the"
示例 2:
​
输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。
示例 3:
​
输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

作者:力扣 (LeetCode) 链接:力扣 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我的代码

class Solution {public String reverseWords(String s) {//首先先将字符串的前后空格去掉String str=s.trim();//按照空格进行拆分 按照一个或者多个空格进行拆分String[] strList=str.split(" +");StringBuilder sbu=new StringBuilder();for(int i= strList.length-1;i>=0;i--){sbu.append(strList[i]+" ");}  return sbu.toString().trim();}
}

官网代码

lass Solution {public String reverseWords(String s) {// 除去开头和末尾的空白字符s = s.trim();// 正则匹配连续的空白字符作为分隔符分割List<String> wordList = Arrays.asList(s.split("\\s+"));Collections.reverse(wordList);return String.join(" ", wordList);}
}
​
其中\\s代表所有空白字符(空格或者制表符)  +代表1个或者多个 ---至少有一个
Collections.reverse(wordList);将字符串数组进行反转
String.join(" ", wordList);将字符串数组拼成一个字符串。 每个字符串之间按照空格连接 
这个方法也完全自己写方法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);} //如果为空格 但是sb中最后一个不是空格也加入进去 (这样就将多个空格变成了一个空格)else if (sb.charAt(sb.length() - 1) != ' ') {sb.append(c);}
​++left;}return sb;}
​//将字符串进行反转 a good example就反转成 elpmaxe doog apublic void reverse(StringBuilder sb, int left, int right) {while (left < right) {char tmp = sb.charAt(left);//主要是用来替换的,方法里面有两个参数 setCharAt(int index,Char ch)//第一个参数是取代的位置 索引从0开始 第二个参数是你要替换为的字符串sb.setCharAt(left++, sb.charAt(right));sb.setCharAt(right--, tmp);}}
​//这个主要是将elpmaxe doog a 变成 example good apublic 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,去找下一个单词start = end + 1;++end;}}
}
​

找出字符串中第一个匹配项的下标

给你两个字符串 haystackneedle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1

示例 1:

输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:

输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。

我的代码 

class Solution {public int strStr(String haystack, String needle) {int hLen=haystack.length();int nLen=needle.length();for(int i=0;i<hLen-nLen+1;i++){String sub=haystack.substring(i,i+nLen);if(sub.equals(needle)){return i;}} return -1;}
}
暴力求解
​
//不用字符串切割的话class Solution {public int strStr(String haystack, String needle) {int n = haystack.length(), m = needle.length();for (int i = 0; i + m <= n; i++) {boolean flag = true;for (int j = 0; j < m; j++) {if (haystack.charAt(i + j) != needle.charAt(j)) {flag = false;break;}}if (flag) {return i;}}return -1;}
}
需要的时间复杂度是 m*n有一种算法是可以讲这个时间复杂度变成m+n  也就是KMP算法

二、面试题

SpringMvc中如何解决POST请求的中文乱码问题

在Spring-web中给我们提供了一个过滤器是专门用于解决POST请求的中文乱码问题的

 

 在这里CharacterEncodingFilter的类中有这样一个方法,来设置编码格式

 

设置

在web.xml中设置这样的过滤器即可

<!-- 设置中文乱码 --><filter><filter-name>postEncoding</filter-name><!-- springmvc提供的过滤器全限定类名 --><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><!-- encoding ----不能改变--><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><!-- forceRequestEncoding --><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param><init-param><!-- forceResponseEncoding --><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>postEncoding</filter-name><!-- 都进行过滤 --><url-pattern>/*</url-pattern></filter-mapping>

 

如果是get

直接设置tomcat的server.xml的文件

SpringMvc的工作流程

 

1.客户端发起请求,请求进入到前端控制器 DispatcherServlet

2.前端控制器DispatcherServlet请求处理器映射器 HandlerMapping,返回处理器链HandlerChain和拦截器链InterceptorChain

3.前端控制器DispatcherServlet根据处理器映射器调用对应的处理器适配器 HandlerAdapter

4.处理器适配器HandlerAdapter按照规则查找处理器Handler并执行Handle,返回ModelAndView返回处理器适配器 HandleAdapter 

5.处理器适配器HandlerAdapter将ModelAndView返回给前端控制器 DispatcherServlet

6.前端控制器DispatcherServlet使用ModelAndView去请求视图解析器ViewResolver解析视图,生成view返回给前端控制器 DispatcherServlet 

7.前端控制器DispatcherServlet将Model注入到View中,生成静态的Html并返回给前端控制器DispatcherServlet 

8.前端控制器DispatcherServlet 将静态代码写入到客户端

 

 

 

 

 

 

 

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

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

相关文章

【Nginx】三、Nginx实现四层负载均衡Nginx实现限流防盗链流量镜像

Nginx实现四层负载均衡一、Nginx实现四层负载均衡1、四层负载均衡与七层负载均衡区别2、Nginx四层负载均衡配置3、SocketTool工具4、TCP&UDPDebug工具二、Nginx实现限流三、Nginx实现防盗链四、Nginx流量镜像一、Nginx实现四层负载均衡 我们之前介绍的HTTP负载均衡&#x…

Silane-PEG-Alkyne,硅烷-聚乙二醇-炔基用于修饰蛋白类

An English name&#xff1a;Silane-PEG-Alkyne Chinese name&#xff1a;硅烷-聚乙二醇-炔基 Item no&#xff1a;X-GF-0314-10k CAS&#xff1a;N/A Formula&#xff1a;N/A MW&#xff1a;Silane-PEG-Alkyne5000、Silane-PEG-Alkyne3400、Silane-PEG-Alkyne2000、硅烷-…

【附源码】计算机毕业设计SSM美食菜谱网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

(附源码)计算机毕业设计SSM基于JAVA线上订餐系统

&#xff08;附源码&#xff09;计算机毕业设计SSM基于JAVA线上订餐系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【Vue Router】

资料 官网&#xff1a;https://v3.router.vuejs.org/zh/guide/ 尚硅谷视频&#xff1a;https://www.bilibili.com/video/BV1Zy4y1K7SH?p118 基本使用 安装&#xff1a; 这里安装vue3.x vue 2.x 版本对应 vue-router 3.xvue 3.x 版本对应 vue-router 4.x其他以此类推 npm…

【数据结构】------ 堆

目录 堆的概念及结构 堆的实现 堆向上调整算法 堆向下调整算法 堆的创建 堆的初始化和销毁 堆的插入 堆的删除 获取堆顶的数据 获取堆的数据个数 堆的判空 TopK问题&#xff08;在N个数找出最大&#xff08;小&#xff09;的前K个&#xff09; 堆排序 堆的概念及…

自学Python第二十七天- 简单部署生产环境,docker 的使用

自学Python第二十七天- 部署极简生产环境Windows 环境部署创建绿色 python 环境Linux 环境部署创建 Linux 环境使用Hyper-V使用 VMware 部署使用 docker 部署docker 原理安装 docker使用 linux 系统使用包管理工具使用 docker 仓库使用源代码安装使用 windows 系统开启 docker …

寻路算法-从bfs到Astart

一、简单BFS算法 bfs即广度优先搜索&#xff0c;最基础的寻路算法 即向出发点向四周无目的扩散&#xff0c;知道到达终点或者无法扩散为止 # coding: utf-8import random import bisectclass Solution(object):def __init__(self, n, m, bad):self.map [[0, 0, 0, 0, 0, 0, …

1.4. PUBLIC KEYS AS IDENTITIES公钥及身份 1.5. TWO SIMPLE CRYPTOCURRENCIES两种简单加密货币

《BITCOIN AND CRYPTOCURRENCY TECHNOLOGIES》Chapter 1系列 1.4. PUBLIC KEYS AS IDENTITIES 公钥作为身份 从一个签名方案中提取一个公钥将之视为一个身份。 公钥 public key 可以代表私钥 private key 的公众身份&#xff0c;而 private key 则是此人身份真实的内涵。 随时…

Linux服务搭建 -- NTP服务

什么是NTP&#xff1f; NTP全名“Network TimeProtocol”&#xff0c;即网络时间协议&#xff0c;是由RFC 1305定义的时间同步协议&#xff0c;用来在分布式时间服务器和客户端之间进行时间同步。 NTP基于UDP报文进行传输&#xff0c;使用的UDP端口号为123。使用NTP的目的是对网…

QFramework v1.0 使用指南 工具篇:03. CodeGenKit 脚本生成

在这一篇&#xff0c;我们学习几乎每个项目都要用到并且从中受益的功能&#xff1a;自动生成脚本并绑定&#xff0c;简称脚本生成。 基本使用 我们先在场景中&#xff0c;随便创建一些有父子结构的 GameObject&#xff0c;如下所示&#xff1a; 接着给 Player 挂上 ViewContr…

Spring 更简单的读取和存储对象

在 Spring 中想要更简单的存储和读取对象的核心是使用注解. 1.存储 Bean 对象 1.1 前置⼯作&#xff1a;配置扫描路径&#xff08;重要&#xff09; 注意&#xff1a;想要将对象成功的存储到 Spring 中&#xff0c;我们需要配置⼀下存储对象的扫描包路径&#xff0c;只有被配…

基于hadoop平台hive数据库处理电影数据

目录 1 开发背景 3 1.1开发背景与意义 4 1.2 开发环境与工具 4 2 可行性分析 7 2.1 可行性分析 8 2.2 需求可行性 8 2.3 技术可行性 8 2.4 操作可行性 8 2.5经济可行性 9 3 系统总体设计 10 3.1 总体设计方案 10 3.2 基础数据准备 10 3.3 环境准备 13 3.4 软件准备 13 4 系统详…

【文件操作详解】—— 一篇文章带你学会C语言的文件操作

文章目录1. 为什么要使用文件2. 什么是文件2.1 程序文件2.2 数据文件2.3 文件名3. 文件的打开和关闭3.1 文件指针3.2 如何打开和关闭文件3.2.1. 打开文件&#xff1a;fopen3.2.2 关闭文件&#xff1a;fclose3.2.3 补充4. 文件的顺序读写4.1 fputc4.2 fgetc4.3 fputs4.4 fgets4.…

(附源码)计算机毕业设计SSM基于Java网上玩具商店

&#xff08;附源码&#xff09;计算机毕业设计SSM基于Java网上玩具商店 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

c语言打力扣第89场双周赛第一题和315场周赛第一、二题(c语言)

目录 一、6208.有效时间的数目(简单题) (c语言暴力解法) 二、6204.于对应负数同时存在的最大正整数(简单题)(c语言求解) 三、6205.反转之后不同正数的数目(中等题)(c语言求解) 总结 一、6208.有效时间的数目(简单题) (c语言暴力解法) 89场双周赛第一题&#xff1a; int co…

C++ 构造函数详解

目录 0. 什么是构造函数 1. 默认构造函数 2. 一般构造函数 3. 拷贝构造函数 4. 转换构造函数 5. 移动构造函数 0. 什么是构造函数 在定义类的成员函数的时候&#xff0c;一般的成员函数与普通的全局函数没有太大的区别&#xff0c;在定义函数的时候都需要说明要返回的类…

JVM(Java Virtual Machine)内存模型

什么是JVM JVM&#xff08;Java Virtual Machine&#xff09;叫做Java虚拟机。jvm是Java运行基础。java虚拟机时一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成应用程序可以运行在任何平台&#xff08;平台无关性&…

Android移动应用开发之Viewpage2+fragment实现微信滑动界面的效果

文章目录布局viewpager2fragmentadapter实现的效果如下&#xff1a;滑动界面能够实现界面的跳转。点击下面按钮同样实现界面的跳转。布局 最下面的导航栏&#xff0c;单独写了个布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <…

【数据结构与算法】小白入门

前言 小白决定补一补计算机基础知识&#xff0c;欢迎路过的大佬各抒己见&#xff01; 正文 数据结构与算法 数据结构是算法的基础&#xff0c;算法在特定的数据结构上才能发挥作用&#xff1b;数据存储结构会影响算法效率&#xff1b; 数据结构说明数据的组织方式&#…