LeetCode.917-只反转字母(Reverse Only Letters)
这是悦乐书的第353次更新,第378篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第215题(顺位题号是917)。给定一个字符串S,返回“反向”字符串,其中所有非字母的字符都保留在同一位置,并且所有字母都反转其位置。例如:
输入:“ab-cd”
输出:“dc-ba”
输入:“a-bC-dEf-ghIj”
输出:“j-Ih-gfE-dCba”
输入:“Test1ng-Leet = code-Q!”
输出:“Qedo1ct-eeLg = ntse-T!”
注意:
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S不包含
\或“
02 第一种解法
使用双指针。
定义两个指针i和j,一个从前往后,一个从后往前,只有两个指针所在元素都是字母时才交换位置,如果其中一个不是字母,就向前前进一步继续判断,如果两个指针所在元素都不是字母就同时向前移动。
此解法的时间复杂度是O(N),空间复杂度是O(N)。
public String reverseOnlyLetters(String S) {
int i = 0, j = S.length()-1;
char[] arr = S.toCharArray();
while (i < j) {
char c = arr[i];
char c2 = arr[j];
if (Character.isLetter(c) && Character.isLetter(c2)) {
arr[i] = c2;
arr[j] = c;
i++;
j--;
} else if (!Character.isLetter(c) && Character.isLetter(c2)) {
i++;
} else if (Character.isLetter(c) && !Character.isLetter(c2)) {
j--;
} else if (!Character.isLetter(c) && !Character.isLetter(c2)) {
i++;
j--;
}
}
return new String(arr);
}
03 第二种解法
在双指针的基础上做了下变动,使用StringBuilder来拼接新的字符,但是双指针的思路没变。
此解法的时间复杂度是O(N),空间复杂度是O(N)。
public String reverseOnlyLetters2(String S) {
int j = S.length()-1, n = S.length();
StringBuilder sb = new StringBuilder();
for (int i=0; i<n; i++) {
if (Character.isLetter(S.charAt(i))) {
while (j>=0 && !Character.isLetter(S.charAt(j))) {
j--;
}
sb.append(S.charAt(j--));
} else {
sb.append(S.charAt(i));
}
}
return sb.toString();
}
04 第三种解法
利用栈,借助其先进后出的特性。
先将S中的字母全部入栈,然后再遍历S中的字符,如果是字母,就从栈顶取一位元素出来拼接,不是字母,就直接拼接当前元素。
此解法的时间复杂度是O(N),空间复杂度是O(N)。
public String reverseOnlyLetters3(String S) {
Stack<Character> stack = new Stack<Character>();
char[] arr = S.toCharArray();
for (char c : arr) {
if (Character.isLetter(c)) {
stack.push(c);
}
}
StringBuilder sb = new StringBuilder();
for (char c : arr) {
if (Character.isLetter(c)) {
sb.append(stack.pop());
} else {
sb.append(c);
}
}
return sb.toString();
}
05 小结
算法专题目前已连续日更超过六个月,算法题文章221+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode.917-只反转字母(Reverse Only Letters)的更多相关文章
- [Swift]LeetCode917. 仅仅反转字母 | Reverse Only Letters
Given a string S, return the "reversed" string where all characters that are not a letter ...
- LeetCode 206:反转链表 Reverse Linked List
反转一个单链表. Reverse a singly linked list. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3- ...
- [LeetCode] 917. Reverse Only Letters 只翻转字母
Given a string S, return the "reversed" string where all characters that are not a letter ...
- 【LeetCode】917. Reverse Only Letters 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 单指针 双指针 日期 题目地址: https:/ ...
- 【Leetcode_easy】917. Reverse Only Letters
problem 917. Reverse Only Letters solution: class Solution { public: string reverseOnlyLetters(strin ...
- "abc123 ,def456",反转字母,其他位置不变
"abc123 ,def456",反转字母,其他位置不变. 无意间看到个有意思的面试题,忽然来了兴趣想着来做一下. 操作字符串用正则的效率比较高,但第一反应还是用原生来操作.下面说 ...
- [LeetCode] Letter Case Permutation 字母大小写全排列
Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...
- 前端与算法 leetcode 7. 整数反转
目录 # 前端与算法 leetcode 7. 整数反转 题目描述 概要 提示 解析 解法 算法 传入测试用例的运行结果 执行结果 GitHub仓库 # 前端与算法 leetcode 7. 整数反转 题 ...
- 前端与算法 leetcode 242. 有效的字母异位词
目录 # 前端与算法 leetcode 242. 有效的字母异位词 题目描述 概要 提示 解析 解法一:哈希表 解法二:数组判断字符出现次数 解法三:转换字符串 算法 传入测试用例的运行结果 执行结果 ...
随机推荐
- jekens安装
https://jenkins.io/zh/download/ Generic Java package (.war) 下载jenkins.war文件 将jenkins.war发布到tomcat服务器 ...
- 关于css阴影和浮动
盒子阴影box-shadow box-shadow:0 0 1px #000 inset; 水平 垂直 模糊 颜色 : [1] inset代表框内阴影,不加inset代表框外阴影 [2]第1个 ...
- 一个简单的c++类的定义和实例化
#include "iostream" #include <string> using namespace std; class mycoach { private: ...
- python基础(while、运算符、编码初始)
------------恢复内容开始------------ <!doctype html> while循环 while循环 循环:不断重复着某件事就是循环 while 关键字 死循环:w ...
- Python 操作 MySQL 数据库Ⅲ
数据库查询操作 Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据. fetchone(): 该方法获取下一个查询结果集.结果集是一个 ...
- bytes和bytearray总结
The core built-in types for manipulating binary data are bytes and bytearray. They are supported by ...
- poj 3320 jessica's Reading PJroblem 尺取法 -map和set的使用
jessica's Reading PJroblem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9134 Accep ...
- HGOI20190815 题解
Problem A modsum 求$\sum\limits_{i=1}^{n} \sum\limits_{j=1 , i \neq j}^{m} (n \ mod \ i)(m \ mod \ j) ...
- HGOI20190810 省常中互测3
Problem A 夏洛特 若当前处在点$(x,y)$下一时刻可以向该点四周任意方向走动一步, 初始在$(0,0)$是否存在一条合法的路线满足下列$n$个限制: 每一个限制形如$t_i , x_i ...
- sklearn可实现的函数或者功能可分为如下几个方面
1.分类算法2.回归算法3.聚类算法4.降维算法5.模型优化6.文本预处理 其中分类算法和回归算法又叫监督学习,聚类算法和降维算法又叫非监督学习 分类算法 1 2 3 4 5 6 7 8 9 10 1 ...