返回介绍

solution / 0900-0999 / 0917.Reverse Only Letters / README

发布于 2024-06-17 01:03:33 字数 3804 浏览 0 评论 0 收藏 0

917. 仅仅反转字母

English Version

题目描述

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s_ 。_

 

    示例 1:

    输入:s = "ab-cd"
    输出:"dc-ba"
    

      示例 2:

      输入:s = "a-bC-dEf-ghIj"
      输出:"j-Ih-gfE-dCba"
      

        示例 3:

        输入:s = "Test1ng-Leet=code-Q!"
        输出:"Qedo1ct-eeLg=ntse-T!"
        

         

        提示

        • 1 <= s.length <= 100
        • s 仅由 ASCII 值在范围 [33, 122] 的字符组成
        • s 不含 '\"''\\'

        解法

        方法一

        class Solution:
          def reverseOnlyLetters(self, s: str) -> str:
            s = list(s)
            i, j = 0, len(s) - 1
            while i < j:
              while i < j and not s[i].isalpha():
                i += 1
              while i < j and not s[j].isalpha():
                j -= 1
              if i < j:
                s[i], s[j] = s[j], s[i]
                i, j = i + 1, j - 1
            return ''.join(s)
        
        class Solution {
          public String reverseOnlyLetters(String s) {
            char[] chars = s.toCharArray();
            int i = 0, j = s.length() - 1;
            while (i < j) {
              while (i < j && !Character.isLetter(chars[i])) {
                ++i;
              }
              while (i < j && !Character.isLetter(chars[j])) {
                --j;
              }
              if (i < j) {
                char t = chars[i];
                chars[i] = chars[j];
                chars[j] = t;
                ++i;
                --j;
              }
            }
            return new String(chars);
          }
        }
        
        class Solution {
        public:
          string reverseOnlyLetters(string s) {
            int i = 0, j = s.size() - 1;
            while (i < j) {
              while (i < j && !isalpha(s[i])) ++i;
              while (i < j && !isalpha(s[j])) --j;
              if (i < j) {
                swap(s[i], s[j]);
                ++i;
                --j;
              }
            }
            return s;
          }
        };
        
        func reverseOnlyLetters(s string) string {
          ans := []rune(s)
          i, j := 0, len(s)-1
          for i < j {
            for i < j && !unicode.IsLetter(ans[i]) {
              i++
            }
            for i < j && !unicode.IsLetter(ans[j]) {
              j--
            }
            if i < j {
              ans[i], ans[j] = ans[j], ans[i]
              i++
              j--
            }
          }
          return string(ans)
        }
        
        function reverseOnlyLetters(s: string): string {
          const n = s.length;
          let i = 0,
            j = n - 1;
          let ans = [...s];
          while (i < j) {
            while (!/[a-zA-Z]/.test(ans[i]) && i < j) i++;
            while (!/[a-zA-Z]/.test(ans[j]) && i < j) j--;
            [ans[i], ans[j]] = [ans[j], ans[i]];
            i++;
            j--;
          }
          return ans.join('');
        }
        
        impl Solution {
          pub fn reverse_only_letters(s: String) -> String {
            let mut cs: Vec<char> = s.chars().collect();
            let n = cs.len();
            let mut l = 0;
            let mut r = n - 1;
            while l < r {
              if !cs[l].is_ascii_alphabetic() {
                l += 1;
              } else if !cs[r].is_ascii_alphabetic() {
                r -= 1;
              } else {
                cs.swap(l, r);
                l += 1;
                r -= 1;
              }
            }
            cs.iter().collect()
          }
        }
        

        如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

        扫码二维码加入Web技术交流群

        发布评论

        需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
        列表为空,暂无数据
          我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
          原文