1. 对字符串的处理不需要增加原来字符串的空间

这种情况下,我们可以利用STL中copy_if的思想从字符串的第一个字符开始处理。首先定义2个指针src, dest全部指向输入字符串的第一个字符,然后用src遍历整个字符串。根据对字符串的不同处理,决定是将src指向的字符拷贝到dest,做一些处理后拷贝到dest,还是直接忽略继续处理下一个字符。

Ex 1. 将字符串中连续多个空格合并成一个空格

void combineSpace(string& s)
{int src = 0, dest = 0;while(src<s.size()){//如果遇到一个空格,拷贝这个空格,并且忽略所有接下来的空格if(s[src] == ' '){s[dest++] = ' ';while(src < s.size() && s[src] == ' '){++src;}}else //否则直接拷贝src到dest{s[dest++] = s[src++];}}   s.resize(dest);
}
 

Ex 2. 给定两个字符串str1, str。把str2中出现的字符从str1中删除

void deleteCommon(string& str1, const string& str2)
{stdext::hash_set<char> mySet;for(int i=0; i<str2.size(); ++i){mySet.insert(str2[i]);}int src = 0, dest = 0;while(src < str1.size()){//如果src指向的字符不在str2中if(mySet.find(str1[src]) == mySet.end()){str1[dest++] = str1[src++];}else{++src;}}str1.resize(dest);
}
 

2. 对字符串的处理需要增加原来字符串的空间

这种情况下, 如果按照前面的方法,指针dest可能会超过src,从而将一些还没有处理的字符覆盖掉。所以,我们应该从字符串的末尾开始处理

Ex 1. 将字符串中的空格用%20替换

void replaceSpace(string& str)
{//计算新的字符串需要多少空间int numSpace = 0;for(int i=0; i<str.size(); ++i){if(str[i] == ' ')++numSpace;}int newSize = str.size() + numSpace*2;//定义从后往前的指针int src = str.size()-1, dest = newSize - 1;str.resize(newSize, ' ');while(src >= 0){//如果遇到空格,用%20替换if(str[src] == ' '){str[dest--] = '0';str[dest--] = '2';str[dest--] = '%';--src;}else //否则直接拷贝src到dest{str[dest--] = str[src--];}}
}

Ex 2. 合并两个排好序的字符串 str1, str2。

void mergeStr(string& str1, const string& str2)
{//定义src1,src2分别指向str1, str2的末尾int src1 = str1.size()-1, src2 = str2.size()-1;str1.resize(str1.size() + str2.size(), ' ');//定义dest指向扩充后的str1的末尾int dest = str1.size() - 1;while(src1 >=0 && src2 >=0){//复制src1和src2中较大的字符到destif(str1[src1] >= str2[src2]){str1[dest--] = str1[src1--];

转载于:https://www.cnblogs.com/yyin/archive/2010/12/11/1902988.html

面试中的字符串问题 (1)相关推荐

  1. 几道 BAT 算法面试中经常问的「字符串」问题

    https://www.toutiao.com/a6675839856192520711/ String 作为最常见的编程语言类型之一,在算法面试中出现的频率极高. 1. 验证回文串 题目来源于 Le ...

  2. c++ 查找 list中最长的字符串_查找不重复字符的最长子字符串(编程面试中常见题-用8种编程语言来回答)...

    查找不重复字符的最长子字符串(编程面试中常见题-用8种编程语言来回答) 给定一个字符串str,找到不重复字符的最长子字符串. 比如我们有 "ABDEFGABEF", 最长的字符串是 ...

  3. 面试中常见的数据结构与算法题整理,想当架构师,数据结构与算法不过关可不行(数组+字符串,共60题)

    [Java架构师面试网]收集整理了一些Java面试的常见问题,这些问题可能会在你下一次技术面试中遇到.想成为Java架构师,这些都是不可避免也是必须要掌握的哦,对于其他模块的面试题,我后续也将单独分享 ...

  4. PHP字符串转数字面试,浅谈php字符串反转 面试中经常遇到的问题

    下面小编就为大家分享一篇浅谈php字符串反转 面试中经常遇到的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.单字节字符串反转 php提供了用于字符串反转的函数strrev( ...

  5. 拉勾教育 重学数据结构与算法 08 | 字符串:如何正确回答面试中高频考察的字符串匹配算法?

    学习资源:拉勾教育 字符串是什么 字符串是由n个字符组成的一个有序整体(n>=0) 一些特殊的字符串: 空串:指还有零个字符的字符串 空格串:只包含空格的字符串 子串:串中任意连续字符组成的字符 ...

  6. java面试时候算法题多吗_java程序员面试中最容易被问到的18个算法题(附答案!)...

    作者:cpp软件架构狮 链接:https://www.toutiao.com/i6618515311836529156/ (点击阅读原文前去围观) 算法是比较复杂又基础的学科,每个学编程的人都会学习大 ...

  7. 如何在一场面试中展现你对Python的coding能力?| 技术头条

    点击上方↑↑↑蓝字关注我们~ 作者 | wLsq 来源 | Python数据科学(ID:PyDataScience) 如果你已经通过了招聘人员的电话面试,那么下面正是该展现你代码能力的时候了.无论是练 ...

  8. 从60多场技术面试中,我总结了这份面试经验

    选自 | freecodecamp   作者 | Uduak Obong-Eren 转自 | 机器之心   参与 | Panda 如果你致力于成为一名软件工程师或数据科学家,技术面试往往是求职过程中的 ...

  9. 反射 字段_详解面试中常考的 Java 反射机制

    反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...

  10. js判断数组中重复元素并找出_面试中常遇见的数组去重

    导读 JS数组去重是面试中并不少见的问题,听起来很简单,当你兴高采烈地回答了你的方法之后,你以为这道题就结束了吗?No,一般来说,面试官会继续问你"除了你刚刚说的方法,还有其他更好的方法吗? ...

最新文章

  1. libc.so.6 is needed by mysql_libc.so.6(GLIBC_2.14)(64bit) is needed by…问题的解决办法
  2. 【南科大发言】人类赋予人工智能伦理,生物进化方向的突破是关键
  3. java语句中switch_Java中的switch-case语句
  4. Java容器有哪些?
  5. 阿里的下一个15年:大数据是核心
  6. 【裂痕识别】基于matlab阈值裂痕+划痕检测【含Matlab源码 467期】
  7. .NET发送邮件代码--測試通過
  8. 魔兽世界单机服务器物品查询,魔兽世界单机版gm命令-物品代要码大全.doc
  9. 淘宝客(springboot版本)从头开始搭建(二)
  10. matlab 三角函数 和差化积,三角函数的和差化积公式
  11. java:编写一个程序完成:完成在银行的存款和取款操作。在定义银行类时,若取款数大于余额则作为异常处理。
  12. 数据库管理系统、数据库和表的关系
  13. 敏捷-细说敏捷建模思想与实践(转)
  14. 有偏估计 and 无偏估计
  15. 脚本录制和回放终端会话(script、scriptreplay)使用
  16. 黑金花大理石_黑金花测评,黑金花大理石简介, 黑金花大理石分类,黑金花拼花_齐家网...
  17. 第一章 日常生活中的正念
  18. C语言 将大写字母转换成相应的小写字母
  19. 大学物理:CH2-电磁学
  20. STC89C52单片机红外遥控中断以及代码显示

热门文章

  1. 拓端tecdat|R语言多维数据层次聚类散点图矩阵、配对图、平行坐标图、树状图可视化城市宏观经济指标数据
  2. 计算机专业新手博客,【转载】学计算机必读献给计算机专业大一新生(1)
  3. Linux复习-进程及其管理
  4. 案例7-1 模拟EXCEL排序 (25 分)(根据结构体某一元素排序)
  5. OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.
  6. R-CNN学习笔记3:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
  7. Python绘制简单漂亮好玩的散点图
  8. cmake静态编译以及安装带有opencv的静态库并调用
  9. 蔚来es6_国产Model Y订单挤爆官网,蔚来ES 6惨遭大量退订?
  10. mysql进程多_MySQL进程列表的进程太多。正常吗?