【无标题】

344. 反转字符串 

思路:数组的翻转(基操)

void reverseString(vector<char>& s) {
    for (int i = 0; i < s.size() / 2; i++) {
        int temp = s[i];
        s[i] = s[s.size() - i - 1];
        s[s.size() - i - 1] = temp;
    }
}

541. 反转字符串 II 学习

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = "abcdefg", k = 2

输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2

输出:"bacd"


学习思路


        这道题我的代码真的是一直再打补丁,补来补去,好不容易过了,因为我把题中三种情况都一一区分开来了, 就导致最后判断剩余字符串长度的代码写的很糟心,看了卡哥的思路才发觉 剩余字符串长度大于 k 但小于 2k 和 每 2k 长度就翻转前 k 个是可以合并的。然后只需要单独判断不满足 k 就行。每次写代码总是上来就写,有思路还好,没有思路就是发呆,然后不断打补丁,以后还是要先理清楚思路,再下手(下面是卡哥的代码

void reverseString(string& s, int st, int l) {  
        while (st < l) {
            int temp = s[st];
            s[st] = s[l];
            s[l] = temp;
            st++;
            l--;
        }
    }

    string reverseStr(string s, int k) {

        for (int i = 0; i < s.size(); i += (2 * k)) {
            // 1. 每隔 2k 个字符的前 k 个字符进行反转
            // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
            // 两个条件竟然能合并
            if (i + k <= s.size()) {
                reverseString(s, i, i + k - 1);
                continue;
            }
            // 3. 剩余字符少于 k 个,则将剩余字符全部反转。
            reverseString(s, i, s.size() - 1);
        }
        return s;

    }

卡码网:54.替换数字  

思路:基操

string exchangeStr(string s) {

    string new_str;
    int i = 0;
    while (i < s.size()) {
        char ch = s[i];
        if (ch >= 'a' && ch <= 'z') {
            new_str += ch;  
        }
        else {
            new_str.append("number");    	 // append 只能向字符串尾部添加字符串!
        }
        ++i;
    }
    return new_str;

}

151. 反转字符串中的单词 

思路:没啥技巧,就是考验代码功底(可惜了我是个补丁选手)

// 删除前导空格
void detelePreNull(string& s) {

    if (s[0] != ' ') return;				// 不存在前导空格
    int count = 0;
    while (count < s.size()) {
        if (s[count] != ' ') break;
        ++count;
    }
    s = s.substr(count);					// 从 count 开始截取字符串
}
// 删除后导空格
void deleteSufNUll(string& s) {

    if (s[s.size() - 1] != ' ')  return;  // 不存在后导空格
    int count = s.size() - 1;
    while (count >= 0) {
        if (count != ' ') break;
        --count;
    }
    s = s.substr(0, count);			// 截取 count 之前的字符串 包含 count 
}
// 删除中间空格
void deleteMidNUll(string& s) {
    string new_s;
    int flag = 0;   // 没有空格
    for (int i = 0; i < s.size(); i++) {
        if (s[i] != ' ') {
            new_s += s[i];
            flag = 0;
        }
        if (s[i] == ' ') {
            if (flag) {
                continue;
            }
            else {
                new_s += s[i];
                flag = 1;
            }
        }

    }
    s = new_s;
}
// 反转单词
void reverseString(string& s, int st, int l) {
    while (st < l) {
        int temp = s[st];
        s[st] = s[l];
        s[l] = temp;
        st++;
        l--;
    }
}

string reverseWords(string s) {

    // 去除多余的空格
    detelePreNull(s);
    deleteMidNUll(s);
    deleteSufNUll(s);

    // 整体翻转
    reverseString(s, 0, s.size() - 1);

    // 每个单词翻转
    int i = 0, j = 0;   // 记录每个单词起始位置
    while (j < s.size()) {
        if (j == s.size() - 1) reverseString(s, i, j);  // 最后一个单词
        if (s[j] != ' ' && s[j + 1] == ' ') {  // 一个完整的单词
            reverseString(s, i, j);
            j = j + 2;
            i = j;
        }
        else {
            j++;
        }
        
    }	
    return s;
}

卡码网:55.右旋转字符串 

思路:无脑使用内置函数

int main() {

    int k;
    cin >> k;
    string s;
    cin >> s;

    string new_s = "";
    new_s += s.substr(s.size() - k, k);
    new_s += s.substr(0, s.size() - k);
    cout << new_s;
    return 0;
}

相关推荐

  1. 标题

    2024-03-13 23:46:05       72 阅读
  2. 标题

    2024-03-13 23:46:05       69 阅读
  3. 标题

    2024-03-13 23:46:05       67 阅读
  4. 标题

    2024-03-13 23:46:05       77 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 23:46:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 23:46:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 23:46:05       87 阅读
  4. Python语言-面向对象

    2024-03-13 23:46:05       96 阅读

热门阅读

  1. 77.组合

    2024-03-13 23:46:05       35 阅读
  2. 安卓kotlin面试题 81-90

    2024-03-13 23:46:05       37 阅读
  3. 【C语言学习路线】

    2024-03-13 23:46:05       43 阅读
  4. TypeScript之函数

    2024-03-13 23:46:05       39 阅读
  5. jetson orin nx重装Cuda加速的OpenCV4.5.4

    2024-03-13 23:46:05       46 阅读
  6. nodejs:npm i与npm i -S、npm i -D区别

    2024-03-13 23:46:05       39 阅读
  7. 知识图谱详细建立过程

    2024-03-13 23:46:05       40 阅读
  8. 320: 鸡兔同笼(python)

    2024-03-13 23:46:05       41 阅读