【LeetCode】344. Reverse String

本文介绍了三种不同的字符串反转方法,包括自定义实现、使用迭代交换以及利用标准库函数。通过对比不同方法,帮助读者理解每种方法的特点及适用场景。

题目:

这道题 不难,但是要看更好的方法

s1:自己写了很笨的方法

#include <iostream>
#include <vector>
using namespace std;


class Solution {
public:
    string reverseString(string s) {
        vector<char> res;
		for(char ch : s)
			res.push_back(ch);
		int len = s.length();
		for(int i = 0;i < len ; i++)
			s[i] = res[len-i-1];
		return s;
    }
};
int main(){
	Solution s;
	string str = "hello";
	string res = s.reverseString(str);

	for(int i = 0; i < str.length(); i++)
		cout << res[i];
		cout << endl;
		system ("pause");
		return 0;
}

s2:参考了discuss后

class Solution {
public:
    string reverseString(string s) {
        int l = 0;
		int r = s.length()-1;
		while(l < r)
			swap(s[l++],s[r--]);
		return s;
    }
};

s3:对函数熟悉后可以更简单(不过有些情况使用基本函数时应考虑时间、空间复杂度)

class Solution {
public:
    string reverseString(string s) {
        reverse(s.begin(),s.end());
		return s;
    }
};
        我查了一下reverse函数,就是用来反转字符串的,那后面的两个参数(a,b)就是说从a到b字符的反转,可以自己代码试一下reverse(s.begin()+1,s.end()-1);可以很清楚的看到结果。

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
LeetCode344题 “反转字符串” 要求将输入的字符串反转过来,输入字符串以字符数组 `char[]` 的形式给出,且需原地修改输入数组,使用 $O(1)$ 的额外空间解决问题。该题有多种解法,以下为你详细介绍: ### 双指针法 该方法使用两个指针分别指向数组的首尾,交换两个指针所指向的元素,然后向中间移动指针,直到两个指针相遇。 #### Python 代码 ```python class Solution: def reverseString(self, s: list[str]) -> None: i, j = 0, len(s) - 1 while i < j: s[i], s[j] = s[j], s[i] i += 1 j -= 1 ``` #### C# 代码(参考思路) ```csharp public class Solution { public void ReverseString(char[] s) { int begin = 0; int end = s.Length - 1; while (begin < end) { char temp = s[begin]; s[begin] = s[end]; s[end] = temp; begin++; end--; } } } ``` #### C++ 代码(参考思路) ```cpp #include <vector> class Solution { public: void reverseString(std::vector<char>& s) { int left = 0, right = s.size() - 1; while (left < right) { char temp = s[left]; s[left] = s[right]; s[right] = temp; left++; right--; } } }; ``` ### 普通替换法 通过循环遍历数组的前半部分,将当前元素与对应倒数位置的元素进行交换。 #### Python 代码 ```python class Solution: def reverseString(self, s: list[str]) -> None: for i in range((len(s) + 1) // 2): temp = s[i] s[i] = s[-i - 1] s[-i - 1] = temp ``` ### 递归法(拓展思路) 递归地交换数组的首尾元素,然后递归处理剩余的子数组。 #### Python 代码 ```python class Solution: def reverseString(self, s: list[str]) -> None: def helper(left, right): if left < right: s[left], s[right] = s[right], s[left] helper(left + 1, right - 1) helper(0, len(s) - 1) ``` ### 中间数组法(不符合 $O(1)$ 额外空间要求,但思路简单) 创建一个新的字符数组作为中间数组,将原数组元素反向赋值给中间数组,最后将中间数组赋值给原数组。 #### Java 代码 ```java class Solution { public void reverseString(char[] s) { char[] result = new char[s.length]; for (int i = 0; i < s.length; i++) { result[i] = s[s.length - 1 - i]; } for (int i = 0; i < s.length; i++) { s[i] = result[i]; } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值