当前位置:网站首页>数组与字符串9-翻转字符串里的单词
数组与字符串9-翻转字符串里的单词
2022-08-03 05:25:00 【花开花落夏】
翻转字符串里的单词
一 题目
来源:leetcode官网
给你一个字符串 s ,逐个翻转字符串中的所有单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。
说明:
输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
翻转后单词间应当仅用一个空格分隔。
翻转后的字符串中不应包含额外的空格。
二 解题
先将字符串按空格切割,再过滤掉多余的空格,然后倒叙拼接字符串。
class Solution {
public String reverseWords(String s) {
StringBuilder result = new StringBuilder();
String format = " %s";
List<String> tmp = Arrays.asList(s.trim().split(" ")).stream().filter(v -> !v.trim().isBlank()).collect(Collectors.toList());
result.append(tmp.get(tmp.size()-1));
for(int i = tmp.size()-2;i>=0;i--){
result.append(String.format(format,tmp.get(i)));
}
return result.toString();
}
}
程序运行效率很低
三 优化
使用两个指针,left指向单词开始,right指向单词结尾,从后往前遍历字符串,将得到的单词加入到StringBuilder中。
class Solution {
public String reverseWords(String s) {
StringBuilder result = new StringBuilder();
//得到单词结尾
int right = getLastCharWithoutSpace(s,s.length()-1);
//得到单词开头
int left = getFirstChar(s,right);
while (left>=0 && left<=right){
//先给每个单词都加一个空格,最后去掉结果字符串开头的空格即可
result.append(' ');
result.append(s, left, right+1);
right = getLastCharWithoutSpace(s,left-1);
if(right>=0){
left = getFirstChar(s,right);
}
}
return result.substring(1);
}
//得到单词开头的那个字符的位置
private int getFirstChar(String tmp,int endIndex){
int left = endIndex;
while (left>=0){
if(tmp.charAt(left)!= ' '){
left--;
}else{
break;
}
}
return left+1;
}
//得到单词结尾的那个字符位置
private int getLastCharWithoutSpace(String tmp,int endIndex){
int i = endIndex;
while (i>=0){
if(tmp.charAt(i)==' '){
i--;
} else{
break;
}
}
return i;
}
}
边栏推荐
- ASP.NET MVC:自定义 Route
- 三分钟看懂二极管的所有基础知识点
- Convolutional Nerual Nertwork(CNN)
- 自监督论文阅读笔记 Self-Supervised Visual Representation Learning with Semantic Grouping
- 【第四周】MobileNet和HybridSN
- How the world's leading medical technology company maximizes design productivity | SOLIDWORKS Product Exploration
- 神经网络基础
- ZEMAX | 如何创建简单的非序列系统
- 三、final、finally、 finalize有什么不同?
- 自监督论文阅读笔记 SimCLRV2 Big Self-Supervised Models are Strong Semi-Supervised Learners
猜你喜欢
随机推荐
POE交换机全方位解读(中)
IPC通信 - 管道
A.1#【内存管理】——1.1.4 node: 初始化
快速的将结构体各成员清零
Phase Vocoder的补充完善,Matlab音频变速不变调、变调不变速
自监督论文阅读笔记 DetCo: Unsupervised Contrastive Learning for Object Detection
自监督论文阅读笔记 Ship Detection in Sentinel 2 Multi-Spectral Images with Self-Supervised Learning
观看华为AI技术领域课程--深度学习前三章总结
cobalt strike 的基础使用
A.1#【内存管理】——1.1.2 zone: struct zone
自监督论文阅读笔记 Multi-motion and Appearance Self-Supervised Moving Object Detection
自监督论文阅读笔记 Self-supervised Learning in Remote Sensing: A Review
IPC 通信 - IPC
C# 数组之回溯法
g++ parameter description
二、Exception和Error有什么区别?
常见的电子元器件分类介绍-唯样商城
KASLR-内核地址空间布局随机化
ZEMAX | 在OpticStudio中建立扩增实境(VR)头戴式显示器
c#,.net 下载文件 设置断点