遍历该字符串,依次转换为小写,存入新的字符串中
- public static String toLowerCase(String s) {
- int n = s.length();
- char[] chars = s.toCharArray();
- for (int i = 0; i < n; ++i) {
- if (chars[i] >= 65 && chars[i] <= 90) {
- chars[i] += 32;
- }
- }
- String str = new String(chars);
- return str;
- }
思路:
使用双指针,一个在前,一个在后,相向移动,遍历字符串
在遍历的过程中,将两指针指向的元素交换位置
直到两指针相遇
- public static void reverseString(char[] s) {
- int n = s.length;
- for (int left = 0, right = n - 1; left < right; ++left, --right) {
- char tmp = s[left];
- s[left] = s[right];
- s[right] = tmp;
- }
- }
我们有两种思路:
将所有的字母压栈
双指针遍历字符串
遍整个字符串,将字母依次压入栈中
创建一个新的字符串对象,再次遍历该字符串:如果是非字母,将该字符放入新字符串;如果是字母,则从存入弹出的栈顶元素
直到遍历结束
- public static String reverseOnlyLetters(String S) {
- Stack
letters = new Stack(); - for (char c : S.toCharArray())
- if (Character.isLetter(c))
- letters.push(c);
-
- StringBuilder ans = new StringBuilder();
- for (char c : S.toCharArray()) {
- if (Character.isLetter(c))
- ans.append(letters.pop());
- else
- ans.append(c);
- }
-
- return ans.toString();
- }
定义两个指针,一个从头向后遍历,一个从后向前,维护字母字符
创建一个新的字符串对象,前指针遍历字符串
如果是非字母,则将该字符放入新字符串;如果是字母,则移动后指针,找到字母,将该字母存入新的字符串
直到前指针遍历结束
- public static String reverseOnlyLetters2(String S) {
- if (S == null || S.length() == 0){
- return S;
- }
-
- StringBuffer ans = new StringBuffer();
- int j = S.length() - 1;
- for (int i = 0; i < S.length(); i++) {
- if(Character.isLetter(S.charAt(i))){
- while (!Character.isLetter(S.charAt(j)))
- j--;
- ans.append(S.charAt(j--));
- }else {
- ans.append(S.charAt(i));
- }
- }
- return ans.toString();
- }