https://leetcode.com/problems/reverse-only-letters/

1. Two pointers:

  1. //0 ms 6.2 MB
  2. class Solution {
  3. public:
  4. string reverseOnlyLetters(string S) {
  5. int n = S.length();
  6. int l = 0;
  7. int r = n - 1;
  8. while(l < r){
  9. if(isalpha(S[l]) && isalpha(S[r])){ //if S[l] and S[r] are both letters
  10. char tmp = S[l];
  11. S[l] = S[r];
  12. S[r] = tmp;
  13. l++;
  14. r--;
  15. } else if(!isalpha(S[l]) && isalpha(S[r])){
  16. l++;
  17. } else if(isalpha(S[l]) && !isalpha(S[r])){
  18. r--;
  19. } else if(!isalpha(S[l]) && !isalpha(S[r])){
  20. l++;
  21. r--;
  22. }
  23. }
  24. return S;
  25. }
  26. };

2. Two pointers(optimized):

  1. //0 ms 6.2 MB
  2. class Solution {
  3. public:
  4. string reverseOnlyLetters(string S) {
  5. int l = 0;
  6. int r = S.length()-1;
  7. while(l<r){
  8. if(isalpha(S[l]) && isalpha(S[r])){
  9. swap(S[l], S[r]);
  10. l++;
  11. r--;
  12. } else {
  13. if(!isalpha(S[l]))
  14. l++;
  15. if(!isalpha(S[r]))
  16. r--;
  17. }
  18. }
  19. return S;
  20. }
  21. };