【Lintcode】318. Character Grid

記錄演算法發表於2020-11-28

題目地址:

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)

相關文章