资讯专栏INFORMATION COLUMN

小小码民刷算法——反转字符串

Zhuxy / 2943人阅读

摘要:模板经过一个下午的刷题时光,我发现力扣中字符串有关的题,可分为有空格和无空格的俩种类型,模板一记,直接开挂,秋名山的赛道,跑的飞起如果有前后置空格,那么必须判断临时字符串非空才能输出,否则会输出空串对应的代码如下

模板

经过一个下午的刷题时光,我发现力扣中字符串有关的题,可分为有空格和无空格的俩种类型,模板一记,直接开挂,秋名山的赛道,跑的飞起!!!

1、如果有前后置空格,那么必须判断临时字符串非空才能输出,否则会输出空串
`对应的代码如下:

void test01(){	s += " "; //这里在最后一个字符位置加上空格,这样最后一个字符串就不会遗漏	string temp = "";  //临时字符串	vector<string> res; //存放字符串的数组	for (char ch : s)  //遍历字符句子	{		if (ch == " ") //遇到空格		{			if (!temp.empty()) //临时字符串非空			{				res.push_back(temp);				temp.clear();  //清空临时字符串			}		}		else			temp += ch;	}}

2、没有前后置的空格不需要判断空串

void text02(){	s += " ";	string temp = "";	vector<string> res;	for (char ch : s)	{		if (ch == " ")		{			res.push_back(temp);			temp.clear();		}		else			temp += ch;	}}

例题

反转字符串
直接用双指针来解

int n = s.size();for (int left = 0, right = n - 1; left < right; ++left, --right) {    swap(s[left], s[right]);//交换函数}

反转字符串的前缀
需要判断是否为空

class Solution {public:    string reversePrefix(string word, char ch) {    for(int i = 0; word[i] != "/0"; ++i) {        if(word[i] == ch) {            reverse(begin(word), begin(word) + i + 1);//反转字符串            break;        }    }    return word;}};

反转单词

class Solution {public:    string reverseWords(string s) {        string ans;        //i,j用于确定跳过首尾空格的下标范围        int i=0,j=s.size()-1;        //跳过s的首部空格        while(i<=j&&s[i]==" ") i++;        //跳过s的尾部空格        while(i<=j&&s[j]==" ") j--;        //k,w为用于确定每个单词范围的双指针,从非空格尾部开始往前扫描,i为前边界,j为后边界        int k=j,w=j;        //当输入全为空格时,跳过首尾空格后i>j        while(i<=j&&k>=i){            //k往前扫描直到遇到空格停下,或者超出i前边界停下            while(k>=i&&s[k]!=" ") k--;            //k+1到w为一个单词的范围,将每个字符按序加入string ans即可            for(int idx=k+1;idx<=w;idx++) ans+=s[idx];            //没超出前边界i时,k停下遇到的肯定是空格,可能是一个或多个,跳过            if(k>=i&&s[k]==" "){                while(k>=i&&s[k]==" ") k--;                //跳过一个或多个空格后,ans加一个必要的空格                ans+=" ";            }            //w跳到k位置继续扫描下一个单词范围            w=k;        }        return ans;    }};

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123492.html

相关文章

  • Python0基础(上)——期末不挂科

    摘要:易于维护的成功在于它的源代码是相当容易维护的。可移植基于其开放源代码的特性,已经被移植也就是使其工作到许多平台。集合集合是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。基本功能是进行成员关系测试和删除重复元素。 ...

    Ajian 评论0 收藏0
  • July算法习题 - 符串1

    摘要:反转上述步骤得到的结果字符串,即反转字符串的两部分和给予反转,得到,形式化表示为,这就实现了整个反转。例如,原字符串为,,输出结果为。同单词翻转输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以空格符隔开。 July 程序员编程艺术:面试和算法心得题目及习题 旋转字符串 题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如...

    Betta 评论0 收藏0
  • 【LeetCode】符串初级算法-反转符串

    摘要:题目描述反转字符串编写一个函数,其作用是将输入的字符串反转过来。示例输入输出示例输入输出思路先用转成数组,再用反转,最后用组合成字符串。 题目描述 反转字符串编写一个函数,其作用是将输入的字符串反转过来。 示例 1: 输入: hello 输出: olleh 示例 2: 输入: A man, a plan, a canal: Panama 输出: amanaP :lanac a ,n...

    赵连江 评论0 收藏0
  • JavaScript中的算法(附10道面试常见算法题解决方法和思路)

    摘要:中的算法附道面试常见算法题解决方法和思路关注每日一道面试题详解面试过程通常从最初的电话面试开始,然后是现场面试,检查编程技能和文化契合度。值得记住的数组方法有和。一个好的解决方案是使用内置的方法。 JavaScript中的算法(附10道面试常见算法题解决方法和思路) 关注github每日一道面试题详解 Introduction 面试过程通常从最初的电话面试开始,然后是现场面试,检查编程...

    Cruise_Chan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<