博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
249. Group Shifted Strings
阅读量:5261 次
发布时间:2019-06-14

本文共 2639 字,大约阅读时间需要 8 分钟。

今天做的都是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
> groupStrings(String[] strings) { List
> res = new ArrayList
>(); Map
> map = new HashMap
>(); for(int i = 0; i < strings.length;i++) { if(map.containsKey(strings[i].length())) { map.get(strings[i].length()).add(strings[i]); } else { List
tempList = new ArrayList<>(); tempList.add(strings[i]); map.put(strings[i].length(),new ArrayList<>(tempList)); } } for(Integer k: map.keySet()) { List
list = map.get(k); while(list.size()!=0) { String a = list.get(0); list.remove(0); List
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
(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; }}

二刷。

这个题居然是E难度的? 感觉很麻烦。

一刷是先按照String的长度分类,分类之后再看能不能shift进行二次归类。

二刷换了方法,比如BCD XYZ都是由ABC得到的,我们不放把每个string的第一个字母变成A,剩下的字母根据第一个字母的SHIFT程度相应SHIFT。

BCD,第一个字母从B到A,变了1,那么C和D也变1,就是BC,最后是ABC。
同理XYZ。

然后根据第一个字母为A来分来,简单多了。

复杂度:

电面复杂度吃屎了一次之后,才发现自己复杂度计算很差,得抓紧。。
Time O(n * k) Space O(n * k)
不是很确定,N个Sring,K是String的长度。

public class Solution {    public List
> groupStrings(String[] strings) { List
> res = new ArrayList
>(); if (strings.length == 0) return res; Map
> map = new HashMap
>(); for (int i = 0; i < strings.length; i++) { String tempStr = shiftStr(strings[i]); if (map.containsKey(tempStr)) { map.get(tempStr).add(strings[i]); } else { List
tempList = new ArrayList<>(); tempList.add(strings[i]); map.put(tempStr, tempList); } } for (String s: map.keySet()) { res.add(map.get(s)); } return res; } public String shiftStr(String s) { String res = ""; if (s.length() == 0) return res; int diff = s.charAt(0) - 'a'; res += 'a'; for (int i = 1; i < s.length(); i++) { char c = s.charAt(i); if (c - diff < 'a') res += (char)(c - diff + 26); else res += (char)(c - diff); } return res; }}

转载于:https://www.cnblogs.com/reboot329/articles/6028961.html

你可能感兴趣的文章
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>