1. 程式人生 > >LeetCode 917. 僅僅反轉字母(C、C++、python)

LeetCode 917. 僅僅反轉字母(C、C++、python)

給定一個字串 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 "

C

char* reverseOnlyLetters(char* S) 
{
    int n=strlen(S);
    int* temp=(int*)malloc(sizeof(int)*n);
    int m=0;
    char k;
    for(int i=0;i<n;i++)
    {
        if((S[i]>='a' && S[i]<='z') || (S[i]>='A' && S[i]<='Z'))
        {
            temp[m++]=i;
        }
    }
    for(int i=0;i<m/2;i++)
    {
        k=S[temp[i]];
        S[temp[i]]=S[temp[m-1-i]];
        S[temp[m-1-i]]=k;
    }
    return S;
    
}

C++

class Solution {
public:
    string reverseOnlyLetters(string S) 
    {
        vector<int> temp;
        int n=S.length();
        for(int i=0;i<n;i++)
        {
            if((S[i]>='a' && S[i]<='z') || (S[i]>='A' && S[i]<='Z'))
            {
                temp.push_back(i);
            }
        }
        int m=temp.size();
        char k;
        for(int i=0;i<m/2;i++)
        {
            k=S[temp[i]];
            S[temp[i]]=S[temp[m-1-i]];
            S[temp[m-1-i]]=k;
        }
        return S;
    }
};

python

class Solution:
    def reverseOnlyLetters(self, S):
        """
        :type S: str
        :rtype: str
        """
        n=len(S)
        temp=[]
        SS=list(S)
        for i in range(0,n):
            if S[i]>='a' and S[i]<='z' or S[i]>='A' and S[i]<='Z':
                temp.append(i)
        m=len(temp)
        for i in range(0,m//2):
            k=S[temp[i]]
            SS[temp[i]]=S[temp[m-1-i]]
            SS[temp[m-1-i]]=k
        return ''.join(SS)