【LeetCode】亲密字符串 Java 题解
题目描述
给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。
交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。
例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。
复制代码
思路分析
今天的算法每日一题是字符串处理题目。根据题目描述,我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,这一关键点,进行分情况讨论。
首先,我们分别获取 s, goal 的长度,当长度不相等时候,直接返回 false。
当两者长度相同的时候。分情况讨论,当 s 与 goal 相同时候,只需保证 s 中有两个相同的字符即可。当 s 与 goal 不同时候,需要记录不同的位置,并交换比较。实现代码如下:
通过代码
复制代码
总结
上述代码的时间复杂度是 O(n),空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/bbb31ef708b2ea88b7ca87099】。文章转载请联系作者。
评论