题目地址:
https://www.lintcode.com/problem/character-grid/description
给定两个字符串
A
A
A和
B
B
B,返回一个矩阵。串
A
A
A要求从左往右输出,串
B
B
B要求从上往下输出,两串交于一点(即有一个字母共用)。共用的字母要求是串A中第一个在串B也包含的字母,并且要求交点是两串中各自第一次出现共用的字母的位置。别的位置填.
补齐。
先从 A A A中找到第一个包含在 B B B中的字符,然后构造矩阵。代码如下:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Solution {
/**
* @param A: A string
* @param B: A string
* @return: A string array
*/
public List<String> characterGrid(String A, String B) {
// write your code here.
List<String> res = new ArrayList<>();
Set<Character> set = new HashSet<>();
for (int i = 0; i < B.length(); i++) {
set.add(B.charAt(i));
}
int posA = -1;
for (int i = 0; i < A.length(); i++) {
if (set.contains(A.charAt(i))) {
posA = i;
break;
}
}
int posB = B.indexOf(A.charAt(posA));
for (int i = 0; i < B.length(); i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < A.length(); j++) {
if (j != posA) {
sb.append('.');
} else {
sb.append(B.charAt(i));
}
}
res.add(sb.toString());
}
res.set(posB, A);
return res;
}
}
时空复杂度 O ( l A l B ) O(l_Al_B) O(lAlB)。