大家好我是苏麟 , 今天带来字符串相关的题目 .
大纲
- 反转问题
- 字符串反转
- 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(); }
}
这期就到这里 , 下期见!