大家好我是苏麟 , 今天带来字符串相关的题目 .
大纲
- 反转问题
- 字符串反转
- K个一组反转
- 仅仅反转字母
- 反转字符串中的单词
反转问题
字符串反转
描述 :
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s的形式给出。
题目 :
LeetCode 344. 反转字符串 :
字符串反转
分析 :
这道题还是很简单的 , 只要把最前边和最后的元素调换就行了 , 用两个变量记录第一个元素下标 和 最后一个变量下标 , 操作变量来完成反转 .
解析 :
class Solution {
public void reverseString(char[] s) {
if(s.length == 0 ||s == null){
return;
}
int left = 0;
int right = s.length - 1;
for(int i = 0 ;i < s.length / 2;i++){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
K个一组反转
描述 :
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
题目 :
LeetCode 541. 反转字符串 II :
f反转字符串
分析 :
我们直接按题意进行模拟就可以: 反转每个下标从 2k的倍数开始的,长度为 k的子串。若该子串长度不足k,则反转整个子串。
解析 :
class Solution {
public String reverseStr(String s, int k) {
char[] arr = s.toCharArray();
int length = s.length();
for(int i = 0;i < length;i+= 2 *k){
exchangeArr(arr,i,Math.min(i + k,length) -1 );
}
return new String(arr);
}
public void exchangeArr(char[] arr, int left , int right){
while(left < right){
char a = arr[left];
arr[left] = arr[right];
arr[right] = a;
left++;
right--;
}
}
}
仅仅反转字母
描述 :
给你一个字符串 s ,根据下述规则反转字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小写或大写)位置反转。
返回反转后的 s 。
题目 :
LeetCode 917. 仅仅反转字母 :
仅仅反转字母
分析 :
将 s 中的所有字母单独存入栈中,所以出栈等价于对字母反序操作然后,遍历 s 的所有字符,如果是字母我们就选择栈顶元素输出。
解析 :
class Solution {
public String reverseOnlyLetters(String s) {
Stack<Character> stack = new Stack<>();
for(char temp : s.toCharArray()){
if(Character.isLetter(temp)){
stack.push(temp);
}
}
StringBuilder ans = new StringBuilder();
for(char temp : s.toCharArray()){
if(Character.isLetter(temp)){
ans.append(stack.pop());
}else{
ans.append(temp);
}
}
return ans.toString();
}
}
反转字符串中的单词
描述 :
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串
题目 :
LeetCode 151. 反转字符串中的单词 :
反转字符串中的单词
分析 :
我们可以借助 spilt 函数来分割单词 , 再用 可变字符串 添加单词 .
解析 :
class Solution {
public String reverseWords(String s) {
String[] s1 = s.split(" ");
StringBuilder ans = new StringBuilder();
for (int i= s1.length - 1; i >= 0 ;i--){
if(s1[i] != ""){
ans.append(s1[i]).append(" ");
}
}
return ans.toString().trim();
}
}
这期就到这里 , 下期见!