两个字符串置换

时间:2018-06-25 22:53:21

标签: java algorithm permutation

该问题基于主题“字符串置换”。有两个问题,我相信每个问题都相似:

Question1(来自CTCI):给定两个字符串,编写一个方法来确定一个是否是另一个的排列。

条件:区分大小写且空格很大

排列定义:如果两个字符串是排列,那么我们知道它们具有相同的字符,但顺序不同。而且,它们具有相同的字符数。

Question2(来自leetcode):给定两个字符串s1和s2,如果s2包含s1的排列,则编写一个函数以返回true。换句话说,第一个字符串的排列之一是第二个字符串的子字符串。

Example 1: Input:s1 = "ab" s2 = "eidbaooo" 
Output:True 
Explanation: s2 contains one permutation of s1 ("ba").

Example 2:
Input:s1= "ab" s2 = "eidboaoo"
Output: False

条件: 输入的字符串仅包含小写字母。

两个给定字符串的长度在[1,10,000]范围内。

这是我的问题。一个Question1声明字符串的大小应相同,而另一个(Question2示例)则表明它们应该不同。哪一个是正确的,为什么。

如果在面试中被问到,哪种方式(陈述)可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

这是两个可以通过不同方式解决的问题:

  • 第一个问题是对两个字符串进行排序并比较结果的快速解决方案。
  • 第二个问题要难一些-您可以通过计算两个字符串中每个字符的计数,然后检查较短字符串中每个字符的计数是否小于或等于字符串中相应字符的计数来解决该问题。更长的字符串。
  • 只需添加两个字符串长度相同的检查,即可重用第二个问题的解决方案来解决第一个问题。