Java 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。

该题目来自力扣题库

示例

示例 1:
输入:“ab-cd”
输出:“dc-ba”

示例 2:
输入:“a-bC-dEf-ghIj”
输出:“j-Ih-gfE-dCba”

示例 3:
输入:“Test1ng-Leet=code-Q!”
输出:“Qedo1ct-eeLg=ntse-T!”

思路

先把输入的字符串转换成字符数组,之后运用双指针(一个指前left,一个指后right)。
if(left指的内容不是字母)则left++
else if(right所指的内容不是字母)则right–
else//这个就是left和right指的都是字母的情况
交换left和right所指的内容
最后把字符数组转换成字符串之后返回

代码

class Solution {
    public String reverseOnlyLetters(String S) {
        char[] s=S.toCharArray();
        int left=0;
        int right=s.length-1;
        while(left<=right){
            if(!Character.isLetter(s[left])){
                left++;
            }else if(!Character.isLetter(s[right])){
                right--;
            }else{
                char temp='0';
                temp=s[left];
                s[left]=s[right];
                s[right]=temp;
                left++;
                right--;
            }
        }
        S=String.valueOf(s);
        return S;
   }
}

总结

Java中有很多好用的方法

1.把字符串转换成字符数组型

 String S="abcdef"
 char[] s=S.toCharArray();

2.判断字符是否是字母,数字

char c='a';
Character.isLetter(c);
//如果是字母返回true,如果不是字母返回false
Character.isDigit(c);
//如果是数字返回true,如果不是数字返回false
Character.isLowerCase(c);
//如果是小写字母返回true,如果不是小写字母返回false
Character.isUpperCase(c);
//如果是大写字母返回true,如果不是大写字母返回false
Character.isLetterOrDigit(c);
//如果是字母或者数字返回true,如果不是字母或者数字返回false

3.将字符数组转化成字符串

 char[] s={'a','b','c','d'};
 String S=String.valueOf(s);
 //最后S字符串是"abcd"

4.charAt()方法

String s="abcd"
system.out.print(s.charAt(2));
//输出的是c

要注意的是charAt()方法返回的是字符串自定索引处的char值,charAt方法不是改变String的值。

扫描二维码关注公众号,回复: 9077029 查看本文章
发布了14 篇原创文章 · 获赞 27 · 访问量 2225

猜你喜欢

转载自blog.csdn.net/qq_45619426/article/details/104182658