zoukankan      html  css  js  c++  java
  • 249. Group Shifted Strings

    今天做的都是E难度的。。懒得写。

    这道感觉不是E难度。。

    判断是否能SHIFT是使用

    if(a.charAt(i) - a.charAt(i-1) == b.charAt(i) - b.charAt(i-1)||(int)Math.abs((a.charAt(i) - a.charAt(i-1)) - (b.charAt(i) - b.charAt(i-1))) == 26 )
    

    俩字母之间相差是一样的,或者+了26,因为Z的下一个是A。

    然后好像其实也没什么别的值得说的,总结下就是,按长度先分类,然后同样长度的要再按SHIFT分类。

    这题怎么都不像E难度的。。

    public class Solution {
        public List<List<String>> groupStrings(String[] strings) 
        {
            List<List<String>> res = new ArrayList<List<String>>();
            
            Map<Integer,List<String>> map = new HashMap<Integer,List<String>>();
            
            for(int i = 0; i < strings.length;i++)
            {
                if(map.containsKey(strings[i].length()))
                {
                    map.get(strings[i].length()).add(strings[i]);
                }
                else
                {
                    List<String> tempList = new ArrayList<>();
                    tempList.add(strings[i]);
                    map.put(strings[i].length(),new ArrayList<>(tempList));
                }
            }
            
            for(Integer k: map.keySet())
            {
                List<String> list = map.get(k);
                while(list.size()!=0)
                {
                    String a = list.get(0);
                    list.remove(0);
                    List<String> addingList = new ArrayList<>();
                    addingList.add(a);
                    for(int i = 0; i < list.size();)
                    {
                        if(shiftable(a,list.get(i)))
                        {
                            addingList.add(list.remove(i));
                        }
                        else i++;
                    }
                    res.add(new ArrayList<String>(addingList));
                }
                
            }
            
            
            return res;
        }
        
        public boolean shiftable(String a, String b)
        {
            int m  = 0, n= 0;
            
            for(int i = 1; i < a.length();i++)
            {
                if(a.charAt(i) - a.charAt(i-1) == b.charAt(i) - b.charAt(i-1)  ||   
                   (int)Math.abs((a.charAt(i) - a.charAt(i-1)) - (b.charAt(i) - b.charAt(i-1))) == 26 ) continue;
                else return false;
            }
            
            return true;
            
            
        }
    }
    
  • 相关阅读:
    poj1417(带权并查集+背包DP+路径回溯)
    poj1182(带权并查集)
    hdoj3038(带权并查集)
    poj1611(并查集简单应用)
    poj2236(并查集)
    莫队板子,例题
    离散化二维坐标
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    树链剖分板子
    P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
  • 原文地址:https://www.cnblogs.com/reboot329/p/5933744.html
Copyright © 2011-2022 走看看