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;
            
            
        }
    }
    
  • 相关阅读:
    Redis持久化
    《Hadoop权威指南·大数据的存储与分析》阅读笔记(未读完)
    《redis设计与实现》第一版 阅读笔记(未看完)
    LSMTree -> SStable 初体验
    Goland实现Set操作
    使用Goland操作Redis详解
    使用Python操作Redis详解
    学习笔记
    docker技术入门与实战 第三版
    Shell(笔记)
  • 原文地址:https://www.cnblogs.com/reboot329/p/5933744.html
Copyright © 2011-2022 走看看