博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【字符串】字符串逆序
阅读量:4251 次
发布时间:2019-05-26

本文共 1266 字,大约阅读时间需要 4 分钟。

字符串

题目一:

如果一个字符串 str ,把字符串 str 前面的任意部分挪到后面去形成的字符串叫做 str 的旋转词。比如 str = “ 1234 ” , 那么 str 的旋转词有 “ 1234 ” , “ 2341 ” , “ 3412 ” , “ 4123 ” 。给定两个字符串 a 和 b ,请判断 a 和 b 是否互为旋转词?

举例:

a = ” cdab ” , b = ” abcd ” 。返回 true。

a = ” 1ab2 ” , b = ” ab12 ” 。返回 false。

a = ” 2ab1 ” , b= ” ab12 ” 。 返回 true。

思路:

最优解时间复杂度为 O(N)

  • 先判断字符串 a 和 b 是否长度相等。
  • 如果长度相等,生成 a + a 的大字符串。
  • 然后判断大字符串中是否包含 b 字符串。(使用 kmp 算法判断)如果大字符串中包含字符串 b ,那么字符串 a 和 b 就互为旋转词。

举例:

a = ” 1234 “

a + a = ” 12341234 “

很明显发现,如果字符串 a 的长度为 N,在 a + a 的大字符串中,任意一个长度为 N 的子串都是 a 的旋转词。


题目二:

给定一个字符串 a, 请在单词间做逆序调整。

举例:

” pig loves dog ” 逆序成 ” dog loves pig ” 。

” I’m a student. ” 逆序成 ” student. a I’m ”

思路:

  • 实现将字符串局部所有字符逆序的函数 f
  • 利用 f 将字符串所有字符逆序
  • 找到逆序后的字符串中每一个单词的区域,利用 f 将每一个单词的区域逆序

这里写图片描述


题目三:

给定一个字符串 a 和一个整数 i。N为字符串的长度,i 为 a 中的位置,将 a [ 0 … i ] 移到右侧,a [ i + 1 … N - 1 ]移到左侧。

举例:

a = ” ABCDE ” ,i = 2 。将 str 调整为 ” DEABC ” 。

要求:时间复杂度为 O(N),额外空间复杂度为 O(1)。

思路:

  • 先将 a[ 0 … i ] 部分的字符逆序

    这里写图片描述

  • 再将 a[ i + 1 … N - 1 ] 部分的字符逆序

    这里写图片描述

  • 最后将整体的字符 a 逆序

    这里写图片描述


题目四:

给定一个字符串类型的数组 strs,请找到一种拼接顺序,使得将所有的字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的,并返回这个字符串。

举例:

strs = [ ” abc ” , ” de ” ],可以拼接成 ” abcde “,也可以拼接成 ” deabc “,但是前者的字典顺序更小,所以返回 ” abcde ” 。

strs = [ ” b “, ” ba ” ], 可以拼接成 ” bba “, 也可以拼接成 ” bab “,但是后者的字典顺序更小,所以返回 ” bab “。

思路:

最优解的时间复杂度O(N*logN),其实质是一种排序的实现。

这里写图片描述

这里写图片描述

方案二中是比较两个字符串彼此拼接后的字典顺序,所以能成功。

你可能感兴趣的文章
前端页面——Cookie与Session有什么区别
查看>>
DRP问题系列——The Network Adapter could not establish the connection
查看>>
Java学习——Servlet是什么
查看>>
项目总结——传说中的反射竟然是这个样子
查看>>
前端页面——js如何让数据传输更灵活
查看>>
VS发布网站后的文件夹为空
查看>>
ITOO4.0项目总结--成长
查看>>
DRP问题系列——Unhandled event loop exception
查看>>
总结过去——从不着边到步入正轨
查看>>
java学习——XML文件导入
查看>>
java学习——架构的设计是项目的核心
查看>>
Java学习——String变量中的双胞胎
查看>>
java学习——apache commons fileupload实现上传
查看>>
Java学习——JSTL标签与EL表达式之间的微妙关系
查看>>
java学习——Jstl标签库大全
查看>>
java学习——代理模式之动静PK
查看>>
java学习——发送激活邮件-就这么简单
查看>>
Android成长(一)——环境搭建
查看>>
SSH框架——走进Struts2
查看>>
Android成长(二)——两个页面交互
查看>>