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的更多相关文章

  1. [.Net] Excel导入导出各种方式分析

    1.引言 1.1解决哪些问题   现在很多公司用的导出基本上采用的通过gridView导出excel,此种导出存在以下几种问题 1.数据量大的时候有时导出有时会让浏览器卡死,因为导出的excel不是真 ...

  2. java web简单的增删改查

    1.主要的文件,运行结果,运行界面,数据库创建的表等图片. 所要创建的文件和要导入的包: 主页面: 显示界面: 数据库的信息: 删除.查找.修改就不一 一列出来,自己可以运行看看.哈哈 2.接下来我将 ...

  3. Oracle汉字转拼音package

    --函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...

  4. ***CodeIgniter集成微信支付(转)

    微信支付Native扫码支付模式二之CodeIgniter集成篇  http://www.cnblogs.com/24la/p/wxpay-native-qrcode-codeigniter.html ...

  5. SQLite XXTea加密学习

    这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...

  6. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  7. nio加强服务端并发

    究了一下Android推送,方式很多,比如用框架或者用第三方服务,在此并不讨论个中优劣.抱着学习的态度,本人不太喜欢用一些现成的东西,所以自己动手实现了一套简单的推送机制.使用TCP长连接,完成服务器 ...

  8. C#操作内存读写方法的主要实现代码

    C#操作内存读写方法是什么呢?让我们来看看具体的实例实现: using System.Runtime.InteropServices; using System.Text; publicclass F ...

  9. 在AWS中创建NAT节点

    NAT, Network Address Translation,即网络地址转换.当内部网络的主机想要访问外网,但是又不想直接暴露给公网,可以通过NAT节点来访问外网.这样做有两个好处,第一是内网的主 ...

随机推荐

  1. xpath:

    from selenium import webdriverb = webdriver.Firefox()#路径读取方式一:# b.get(r"C:\我的代码\selenium自动化测试\t ...

  2. python 编程2

    一.课堂练习 描述 使用input输入若干个数,输出个数以及其中最大的数 1.普通方法实现 def max(*a): m=a[0] b=0 for x in a: if x>m: m=x b+= ...

  3. Python程序中的线程操作-concurrent模块

    目录 一.Python标准模块--concurrent.futures 二.介绍 三.基本方法 四.ProcessPoolExecutor 五.ThreadPoolExecutor 六.map的用法 ...

  4. Spring案例--打印机

    目录: 1.applicationContext.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> &l ...

  5. PHP 高级面试题 - 如果没有 mb 系列函数,如何切割多字节字符串

    需求 如果需要将可能含有中文的字符串进行拆分成数组,我们下面以 utf-8 编码为例. 解决方案一 我习惯的方法可能是: mb_internal_encoding("UTF-8") ...

  6. LeetCode | 2 的幂

    LeetCode 题库的第 231 题 —— 2 的幂 这题也是比较容易的一题,前提是找到规律即可.如果从 10 进制的角度观察 2 的幂次方,可能并不容易发现规律,那么可以从 2 进制的角度进行观察 ...

  7. HTML5 Canvas 为网页添加文字水印

    <!DOCTYPE html> <html> <body> <canvas id=" style="border:1px solid #d ...

  8. oracle中decode函数用法及应用

    用法 1.decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 相当于if else 那种方式. 2.decode(字段或字段的运算,值1,值2,值3) 当字段或字段的运 ...

  9. node.js如何批量赋值

    1. 数组解析赋值 let a = 1; let b = 2; let c = 3; 等同于 let [a, b, c] = [1, 2, 3]; 默认值 let [a, b = "B&qu ...

  10. make 命令与 Makefile

    make 是一个工具程序,通过读取 Makefile 文件,实现自动化软件构建.虽然现代软件开发中,集成开发环境已经取代了 make,但在 Unix 环境中,make 仍然被广泛用来协助软件开发.ma ...