如何解决交换字符串中的单词面试问题
我遇到了一个没有解决方案的面试问题,我找不到满足内存和运行时要求的解决方案。
给定一个字符串,其中包含 2 个没有空格的单词和一个参数,即第一个单词的长度。您的目标是原地交换这两个词。
示例:swap_words("stackoverflow",5) >> "overflowstack"
时间复杂度:O(N),内存复杂度:O(1)
我设法使用递归来解决它: 首先我将较短的单词移到它的位置,然后用较长的单词重复这个过程。
swap_words("stackoverflow ",5)
stackoverflow >> rflowovestack
swap_words("rflowove",3) # 13-5-5
rflowove >> oveowrfl ### ove-owrfl-stack
swap_words("owrfl",2) # 8-3-3
owrfl >> flrow ### ove-flr-owstack
swap_words("flr",1) # 5-2-2
flr >> rlf ### overlfowstack
这里的调用栈显然不是O(1)内存。
我在某处看到的另一个解决方案是镜像整个字符串,然后分别镜像每个单词:
stackoverflow >> wolfrevokcats
wolfrevo--kcats >> overflow--stack
我认为这要好得多,但我不确定如何在不使用额外空间的情况下就地交换字符串中的字符。我正在用 Python 编写,据我所知,字符串是不可变的。 所以我唯一能想到的就是将字符串转换为字符列表进行交换并从中创建一个新字符串。
那么我在这里错过了什么?在这些要求下,是否有针对该问题的解决方案?
解决方法
我认为最有效的方法是像这样对字符串进行切片:
def swap_words(word,n):
return word[n:] + word[:n]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。