10.29算法(字符串)

4.1字符串翻转

class Solution {
public:
    void reverseString(vector<char>& s) {
        for(int i=0,j=s.size()-1;i<s.size()/2;i++,j--){
            swap(s[i],s[j]);
        }    
    }
};

4.2翻转字符串Ⅱ

class Solution {
public:
    string pathEncryption(string path) {
        int count=0;
        int oldsize=path.size();//原来字符串的长度
        for(int i=0;i<path.size();i++){
            if(path[i]==' ')
                count++;
        }
        path.resize(path.size()+count*2);//扩展新的字符串的长度
        int newsize=path.size();
        for(int i=newsize,j=oldsize;i<j;i--,j--){
            if(path[j]!=' ')//如果遍历值不是空格,则正常替换
                path[i] = path[j];
            else{
                path[j]='0';//当前的j位置被替换成0
                path[j-1]='2';
                path[j-2]='%'
                i-=2;//将i往前进2个单位
            }
        }
        return path;
    }
};

4.3替换空格

class Solution {
public:
    string pathEncryption(string path) {
        int count=0;
        int oldsize=path.size();//原来字符串的长度
        for(int i=0;i<path.size();i++){
            if(path[i]==' ')
                count++;
        }
        path.resize(path.size()+count*2);//扩展新的字符串的长度
        int newsize=path.size();
        for(int i=newsize,j=oldsize;i<j;i--,j--){
            if(path[j]!=' ')//如果遍历值不是空格,则正常替换
                path[i] = path[j];
            else{
                path[j]='0';//当前的j位置被替换成0
                path[j-1]='2';
                path[j-2]='%'
                i-=2;//将i往前进2个单位
            }
        }
        return path;
    }
};

4.4翻转字符串里的单词

class Solution {
public:
    void reverse(string& s,int start,int end){//翻转整个字符串
        for(int i=start,j=end;i<j;i++,j--)
            swap(s[i],s[j]);
    }

    void removekong(string& s){//删除多余的空格
        int slow = 0;
        for(int i=0;i<s.size();++i){
            if(s[i]!=' '){//值为空格时处理
                if(slow!=0)  s[slow++]=' ';//如果此时slow指向元素不是首位元素
                while(i<s.size()&&s[i]!=' ')
                    s[slow++]=s[i++];//如果值不为空格则把完整的单词提前
            }
        }
        s.resize(slow);//更新字符串的长度
    }

    string reverseWords(string s) {
        removekong(s);
        reverse(s,0,s.size()-1);
        int start=0;
        for(int i=0;i<=s.size();i++){
            if(s[i]==' '||i==s.size()){//i是最后一个元素或者s[i]是空格时
                reverse(s,start,i-1);//翻转整个单词
                start=i+1;
            }
        }
        return s;
    }
};
posted @ 2023-10-30 21:14  Ref-rain-  阅读(6)  评论(0)    收藏  举报