本文主要是介绍917. Reverse Only Letters,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
917. 仅仅反转字母
给定一个字符串
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"
解法一
//时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:string reverseOnlyLetters(string S) {int n = S.size();int i = 0, j = n - 1;while(i < n && (S[i] < 'A' || S[i] > 'Z' && S[i] < 'a')) i++;while(j >= 0 && (S[j] < 'A' || S[j] > 'Z' && S[j] < 'a')) j--;while(i < j) {int temp = S[i];S[i] = S[j];S[j] = temp;i++, j--;while(i < n && (S[i] < 'A' || S[i] > 'Z' && S[i] < 'a')) i++;while(j >= 0 && (S[j] < 'A' || S[j] > 'Z' && S[j] < 'a')) j--;}return S;}
};
思路:
- 使用一对指针i,j,分别指向字符串的开头和结尾元素。
- 将i向右移动到首个字母元素;将j向左移动到首个字母元素上;
- 交换i和j所指的元素,重复进行第2步,直到i >= j。
和反转字符串的思路一样。
2019/08/05 21:58
这篇关于917. Reverse Only Letters的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!