<String> 186 293 294 249
186. Reverse Words in a String II
先反转整个字符串,再反转每个单词(调整顺序也可以)
反转单词的时候:当 j 指到最后一个字符的时候,或者 j 的下一个指向空格,则反转该单词。
class Solution {
public void reverseWords(char[] s) {
if(s == null || s.length == 0){
return;
}
reverse(s, 0, s.length - 1);
int i = 0, j = 0;
while(j < s.length){
if(j == s.length - 1 || s[j + 1] == ' '){
reverse(s, i, j);
i = j + 2;
}
j++;
}
}
void reverse(char[] str, int i, int j){
while(i < j){
char c = str[i];
str[i++] = str[j];
str[j--] = c;
}
}
}
293. Flip Game
把两个连续的++变为--,遍历所有情况即可。当 i 和 i - 1都为 +时,添加 -。
class Solution {
public List<String> generatePossibleNextMoves(String s) {
List<String> list = new ArrayList<String>();
for(int i = 1; i < s.length(); i++){
if(s.charAt(i - 1) == '+' && s.charAt(i) == '+'){
list.add(s.substring(0, i - 1) + "--" + s.substring(i + 1, s.length()));
}
}
return list;
}
}
294. Flip Game II
题眼:Write a function to determine if the starting player can guarantee a win.
题目问的是,1p是否能够保证在一种情况下获胜。
用递归,遍历所有可以出现的第一种情况。在这种情况下如果 !canWin表示对手怎样都不能赢,则1p赢。
如果没有一种情况让1p赢,则他输。
时间复杂度:(n - 1) x (n - 3) x (n - 5) x ..., = O(n!!)
class Solution {
public boolean canWin(String s) {
if(s == null || s.length() < 2) return false;
for(int i = 0; i < s.length() - 1; i++){
if(s.charAt(i) == '+' && s.charAt(i + 1) == '+'){
String t = s.substring(0, i) + "--" + s.substring(i + 2, s.length());
if(!canWin(t)){
return true;
}
}
}
return false;
}
}
249. Group Shifted Strings
如果是同类型的字符串,则每个字符串的字母与首字母的距离都是相同的。
ab : offset = a - 'a' = 0,
a - offset = a, key = a
b - offset = b。 key = ab
cd :offset = c - 'a' = 2,
c - offset = a, key = a
d - offset = 1 = b。 key = ab
每个单词的首字母与a的距离设为这个单词的偏移量offset,第二个字母 - offset, 第三个字母 - offset,依此类推,得到的字符串设为key值。如果这个单词key在map里有则直接添加进去,否则添加这个key值。
最后把map转移到结果里。
class Solution {
public List<List<String>> groupStrings(String[] strings) {
List<List<String>> result = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
for(String str : strings){
int offset = str.charAt(0) - 'a';
String key = "";
for(int i = 0; i < str.length(); i++){
char c = (char)(str.charAt(i) - offset);
if(c < 'a'){
c += 26;
}
key += c;
}
if(!map.containsKey(key)){
List<String> list = new ArrayList<>();
map.put(key, list);
}
map.get(key).add(str);
}
for(String key : map.keySet()){
List<String> list = map.get(key);
result.add(list);
}
return result;
}
}
<String> 186 293 294 249的更多相关文章
- [.Net] Excel导入导出各种方式分析
1.引言 1.1解决哪些问题 现在很多公司用的导出基本上采用的通过gridView导出excel,此种导出存在以下几种问题 1.数据量大的时候有时导出有时会让浏览器卡死,因为导出的excel不是真 ...
- java web简单的增删改查
1.主要的文件,运行结果,运行界面,数据库创建的表等图片. 所要创建的文件和要导入的包: 主页面: 显示界面: 数据库的信息: 删除.查找.修改就不一 一列出来,自己可以运行看看.哈哈 2.接下来我将 ...
- Oracle汉字转拼音package
--函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...
- ***CodeIgniter集成微信支付(转)
微信支付Native扫码支付模式二之CodeIgniter集成篇 http://www.cnblogs.com/24la/p/wxpay-native-qrcode-codeigniter.html ...
- SQLite XXTea加密学习
这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...
- Json与javaBean之间的转换工具类
/** * Json与javaBean之间的转换工具类 * * {@code 现使用json-lib组件实现 * 需要 * json-lib-2.4-jdk15.jar * ...
- nio加强服务端并发
究了一下Android推送,方式很多,比如用框架或者用第三方服务,在此并不讨论个中优劣.抱着学习的态度,本人不太喜欢用一些现成的东西,所以自己动手实现了一套简单的推送机制.使用TCP长连接,完成服务器 ...
- C#操作内存读写方法的主要实现代码
C#操作内存读写方法是什么呢?让我们来看看具体的实例实现: using System.Runtime.InteropServices; using System.Text; publicclass F ...
- 在AWS中创建NAT节点
NAT, Network Address Translation,即网络地址转换.当内部网络的主机想要访问外网,但是又不想直接暴露给公网,可以通过NAT节点来访问外网.这样做有两个好处,第一是内网的主 ...
随机推荐
- 剑指Offer-36.数字在排序数组中出现的次数(C++/Java)
题目: 统计一个数字在排序数组中出现的次数. 分析: 给定一个已经排好序的数组,统计一个数字在数组中出现的次数. 那么最先想到的可以遍历数组统计出现的次数,不过题目给了排序数组,那么一定是利用了排序这 ...
- Flink JobManager 和 TaskManager 原理
转自:https://www.cnblogs.com/nicekk/p/11561836.html 一.概述 Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskMana ...
- html背景音乐
标签<audio> 参用属性 autoplay="autoplay"自动播放 controls="controls",在页面内显示显示控件,如播放按 ...
- Spring Cloud Gateway-自定义异常处理
前提 我们平时在用SpringMVC的时候,只要是经过DispatcherServlet处理的请求,可以通过@ControllerAdvice和@ExceptionHandler自定义不同类型异常的处 ...
- Spring Cloud Gateway入坑记
Spring Cloud Gateway入坑记 前提 最近在做老系统的重构,重构完成后新系统中需要引入一个网关服务,作为新系统和老系统接口的适配和代理.之前,很多网关应用使用的是Spring-Clou ...
- oracle学习笔记(十五) PL/SQL语法结构以及使用
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...
- php实现大文件断点续传下载实例
php实现大文件断点续传下载实例,看完你就知道超过100M以上的大文件如何断点传输了,这个功能还是比较经典实用的,毕竟大文件上传功能经常用得到. require_once('download.clas ...
- PHP通过session判断防止表单重复提交实例
PHP通过session判断防止表单重复提交实例,当用户提交表单后,为防止重复操作,通过session来判断是否为初次提交,否则让他返回到之前表单页面. 当前表单页面is_submit设为0 SESS ...
- Java 构造结构私有化
Java 构造结构私有化 单例设计模式:(Singleton) 在一般情况下,一个类只有通过产生对象之后才可以操作这个类. class Singleton { public void print() ...
- 从0系统学Android-1.4日志工具的使用
更多精品文章分类 1.4 日志工具 简单介绍一下日志工具,对以后的开发非常有用 1.4.1 使用日志工具 Log Log 日志工具类提供了 5 个方法来供我们打印信息(级别逐渐提高) Log.v(): ...