给定一个字符串 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!"

提示:

S.length <= 100
33 <= S[i].ASCIIcode <= 122 
S 中不包含 \ or "

思路分析:
首选双指针,判断字符是不是字母,不是字母不改变原来的位置,指针移到下一个,如果是字母就交换两个指针指向的值。
代码如下

public String reverseOnlyLetters(String S) {
			if (S.length() <= 1) {
				return S;
			}else{
		        char[] chs = S.toCharArray();
		        int i = 0;
		        int j = chs.length - 1;
		        while (i < j) {
		            if (!Character.isLetter(chs[i])) {//判断是否为字母
		                i++;//指针下移
		            } else if (!Character.isLetter(chs[j])) {//判断是否为字母
		                j--;//指针下移
		            } else {
		                swap(chs, i, j);//交换两个字符的位置
		                i++;
		                j--;
		            }
		        }
		        return String.valueOf(chs);
		    }
	 }
	// 交换两个字符的位置
	    private void swap(char[] chs, int i, int j) {
	        char temp = chs[i];
	        chs[i] = chs[j];
	        chs[j] = temp;
	    }

该题目来自力扣题库

你可能感兴趣的:(java,算法(数据结构))