LeetCode每日一题:|LeetCode每日一题: 仅仅反转字母(No.917)

题目:仅仅反转字母

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

示例:
输入:"ab-cd" 输出:"dc-ba" 输入:"a-bC-dEf-ghIj" 输出:"j-Ih-gfE-dCba" 输入:"Test1ng-Leet=code-Q!" 输出:"Qedo1ct-eeLg=ntse-T!" 复制代码

思考:
字符串转字符数组,定义两个指针,一个从前往后一个从后向前,判断当两个指针指向的字符都是字母时,交换字符位置。 若指向元素不为字母,则将指针向前或者向后移动,不做交换。 复制代码

实现:
class Solution { public String reverseOnlyLetters(String S) { int start = 0; int end = S.length() - 1; char[] chars = S.toCharArray(); while (start < end) { if ((chars[start] <= 'z' && chars[start] >= 'a') || (chars[start] >= 'A' && chars[start] <= 'Z')) { if ((chars[end] <= 'z' && chars[end] >= 'a') || (chars[end] >= 'A' && chars[end] <= 'Z')) { chars[start] = (char) (chars[start] ^ chars[end]); chars[end] = (char) (chars[start] ^ chars[end]); chars[start] = (char) (chars[start] ^ chars[end]); start++; end--; } else { end--; } } else { start++; } } return String.valueOf(chars); } }复制代码

【LeetCode每日一题:|LeetCode每日一题: 仅仅反转字母(No.917)】转载于:https://juejin.im/post/5ca416d2f265da309d08a03c

    推荐阅读