讨论/《哈希表》 - 移位字符串分组/
《哈希表》 - 移位字符串分组
共 2 个回复

Python3

class Solution:
    def groupStrings(self, strings: List[str]) -> List[List[str]]:
        """
        思路:将所有字符串转化成一种模式——以a****开头
        方法:哈希表
        """
        mp_data = defaultdict(list)
        for str in strings:
            if str[0] == 'a':
                mp_data[str].append(str)
            else:
                tmp = list(str)
                for i in range(len(str)):
                    tmp[i] = chr((ord(tmp[i]) - ord(str[0]) + 26) % 26 + ord('a'))
                tmp = ''.join(tmp)
                mp_data[tmp].append(str)
        return list(mp_data.values())

沙发 Java实现,主要保证 a后面变成z...

class Solution {
    public List<List<String>> groupStrings(String[] strings) {
        if(strings.length==0) return null;
        HashMap<String, List<String>> map = new HashMap<>();
        for (String s : strings) {
            int gap=s.charAt(0)-'a';
            StringBuffer sb = new StringBuffer();
            for(int i=0;i<s.length();i++){
                int point=s.charAt(i)-gap;
                if(point<'a'){
                    point+=26;
                }
                sb.append(Character.toChars(point));
            }
            List<String> list = map.getOrDefault(sb.toString(), new ArrayList<String>());
            list.add(s);
            map.put(sb.toString(),list);
        }
        ArrayList<List<String>> lists = new ArrayList<>();
        for (Map.Entry<String, List<String>> entry : map.entrySet()) {
            lists.add(entry.getValue());
        }
        return lists;
    }
}