• 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;
            
            
        }
    }
    
  • 相关阅读:
    一些基本概念
    Linux命令
    浮点型数据
    编码习惯
    VC++ Debug编译方式
    程序和进程
    文件和目录
    登录
    c#发送http请求注意
    html5获取图片的宽高
  • 原文地址:https://www.cnblogs.com/reboot329/p/5933744.html
Copyright © 2020-2023  润新知