题目地址:
https://www.lintcode.com/problem/twins-strings/description
给定两个字符串 s s s和 t t t,允许将 s s s下标奇偶性相同的字符进行不限次数的对换,问是否可能变为 t t t。这个问题等价于问 s s s的奇(偶)子序列和 t t t的奇(偶)子序列是否是anagram。代码如下:
public class Solution {
/**
* @param s: the first string
* @param t: the second string
* @return: If they are twin strings
*/
public String isTwin(String s, String t) {
// Write your code here
if (s.length() != t.length()) {
return "No";
}
return check(s, t, 0) && check(s, t, 1) ? "Yes" : "No";
}
private boolean check(String s, String t, int start) {
int[] count = new int[256];
for (int i = start; i < s.length(); i += 2) {
char c = s.charAt(i);
count[c]++;
}
for (int i = start; i < t.length(); i += 2) {
char c = t.charAt(i);
if (count[c] == 0) {
return false;
}
count[c]--;
}
return true;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。