ブレース展開

文字列は  S 単語のリストを表します。

単語内の各文字は、1つのまたは複数のオプションがあります。一つの選択肢がある場合は、文字はそのまま表現されています。複数のオプションがある場合、中括弧は、オプションを区切ります。たとえば、  "{a,b,c}" オプションを表します  ["a", "b", "c"]

たとえば、  "{a,b,c}d{e,f}" リストを表します  ["ade", "adf", "bde", "bdf", "cde", "cdf"]

辞書順に、このようにして形成することができるすべての単語を返します。

アイデア:;取る、コアアイデアは、リサイクルのために収集さ満たしブラケットにあり、その後、前方にインデックスを移動し続けるDFS、ブラケット、および収集し、その後、ループのため、この質問は、カンマをスキップするために使用さCharacter.isLetterを、学ばなければなりませんインデックス== s.lengthまで行きます();

class Solution {
    public String[] expand(String S) {
        if(S == null || S.length() == 0) {
            return new String[0];
        }
        
        List<String> list = new ArrayList<String>();
        StringBuilder sb = new StringBuilder();
        dfs(S, list, 0, sb);
        return convert(list);
    }
    
    private String[] convert(List<String> list) {
        String[] res = new String[list.size()];
        for(int i = 0;  i < list.size(); i++) {
            res[i] = list.get(i);
        }
        return res;
    }
    
    private void dfs(String S, List<String> list, int index, StringBuilder sb) {
        if(index == S.length()){
            if(sb.length() > 0) {
                list.add(new String(sb.toString()));
            }
            return;
        }
        
        char c = S.charAt(index);
        if(c == '{') {
            List<Character> chars = new ArrayList<Character>();
            int endindex = index+1;
            while(endindex < S.length() && S.charAt(endindex) != '}'){
                if(Character.isLetter(S.charAt(endindex))) {
                    chars.add(S.charAt(endindex));
                }
                endindex++;
            }
            
            Collections.sort(chars);
            for(Character a : chars) {
                sb.append(a);
                dfs(S, list, endindex+1, sb);
                sb.deleteCharAt(sb.length() -1);
            }
        } else if(Character.isLetter(c)) {
            sb.append(c);
            dfs(S, list, index+1, sb);
            sb.deleteCharAt(sb.length() -1);
        }
    }
}

 

公開された562元の記事 ウォン称賛13 ビュー170 000 +

おすすめ

転載: blog.csdn.net/u013325815/article/details/104002281