# 1239. Maximum Length of a Concatenated String with Unique Characters ###### tags: `Leetcode` `Medium` `Bit Manipulation` `BackTracking` Link: https://leetcode.com/problems/maximum-length-of-a-concatenated-string-with-unique-characters/ ## 思路 先找出本身就没有重复字符的字串们 然后算bitmask 然后做backtracking 找出答案 用```haveSameCharacter()```判断两个mask有没有重复的字符 ## Code ```java= class Solution { int maxLen = 0; public int maxLength(List<String> arr) { List<Integer> len = new ArrayList<>(); List<Integer> masks = new ArrayList<>(); for(String str:arr){ int mask = mask(str); if(mask!=-1){ masks.add(mask); len.add(str.length()); } } backtracking(masks, len, 0, 0, 0); return maxLen; } private void backtracking(List<Integer> masks, List<Integer> len, int currMask, int currLen, int start){ for(int i=start; i<masks.size(); i++){ if(!haveSameCharacter(currMask, masks.get(i))){ backtracking(masks, len, currMask|masks.get(i), currLen+len.get(i), i+1); } } maxLen = Math.max(maxLen, currLen); } private boolean haveSameCharacter(int mask1, int mask2){ for(int i=0; i<26; i++){ if(((mask1>>i)&1)==1 && ((mask2>>i)&1)==1){ return true; } } return false; } private int mask(String str){ int mask = 0; for(int i=0; i<str.length(); i++){ char c = str.charAt(i); if(((mask>>(c-'a'))&1)==1) return -1; mask += 1<<(c-'a'); } return mask; } } ```