【代码随想录算法训练营——Day8】字符串——344.反转字符串、541.反转字符串II、卡码网:54.替换数字

发布于:2025-09-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

LeetCode题目链接
https://leetcode.cn/problems/reverse-string/description/
https://leetcode.cn/problems/reverse-string-ii/description/
https://kamacoder.com/problempage.php?pid=1064

题解
344.反转字符串
受到了之前写的代码的启发(只因为意外的瞄了一眼),升华一下,用了双指针的方法写出来。之后再看看题解学一下有没有别的思路。

541.反转字符串II
本来觉得自己能写出来,但是突然不会了。想了一个繁琐的思路出来,还被AI提示了一句reverse库函数,其中的right的i - k - 1值,是debug调出来的。主要是判断结尾剩余字符串的大小赋值,以及要想到双指针确定边界的思路。

卡码网:54.替换数字
这题有两个思路,一是我第一次写的,调用插入库函数在原字符串进行插入“number”和删除数字,第二个是我本次写的,用字符串连接组成一个新字符串。

代码

//344.反转字符串
#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    void reverseString(vector<char>& s) {
        int left = 0, right = s.size() - 1;
        while (left <= right) {
            char tmp = s[left];
            s[left] = s[right];
            s[right] = tmp;
            left++;
            right--;
        }
    }
};

int main() {
    vector<char> str = { 'h', 'e', 'l', 'l', 'o' };
    for (int i = 0;i < str.size();i++) {
        printf("%c", str[i]);
    }
	printf("\n");
    Solution s;
	s.reverseString(str);
	for (int i = 0;i < str.size();i++) {
		printf("%c", str[i]);
	}
    return 0;
}
//541.反转字符串II
#include <iostream>
#include <string>
using namespace std;

class Solution {
public:
    string reverseStr(string s, int k) {
        int i = 0;
        while (1) {
            i += 2 * k;
            if (i <= s.size()) {
                int left = i - 2 * k, right = i - k - 1;
                reverse(s.begin() + left, s.begin() + right + 1);
            }
            else{
                int left = i - 2 * k;
                int right;
                if (s.size() - left < k) right = s.size() - 1;
                else right = i - k - 1;
				reverse(s.begin() + left, s.begin() + right + 1);
                break;
            }
        }
        return s;
    }
};


int main() {
    string str = "abcd";
    int k = 2;
    Solution s;
    string result = s.reverseStr(str, k);
    cout << result << endl;
    return 0;
}
//卡码网:54.替换数字
#include <iostream>
#include <string>
using namespace std;

string insertNumber(string s) {
	string result;
	for (int i = 0;i < s.size();i++) {
		if (s[i] >= 'a' && s[i] <= 'z') {
			result += s[i];
		}
		else {
			result += "number";
		}
	}
	return result;
}


int main() {
	string str;
	cin >> str;
	string result = insertNumber(str);
	cout << result << endl;
	return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到