<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节点来访问外网.这样做有两个好处,第一是内网的主 ...
随机推荐
- 在Ubuntu环境下配置Proxmark3(PM3)使用环境
参考资料:PM3官方Wiki 因为国内网络上大多是在Kali系统上使用PM3的教程(链接1.链接2.链接3),而这些教程的步骤对于Ubuntu系统并不完全适用.所以写下本文,记录我个人的安装经历. 本 ...
- Idea为类生成序列号(十一)
新建一个测试的实体类Gradle,实现java.io.Serializable接口,选择类名,按Alt+Enter键,出现的提示框中没有生成serialVersionUID的提示,这个需要设置之后才会 ...
- 剑指Offer-33.第一个只出现一次的字符(C++/Java)
题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 分析: 遍历字符串,利用Ha ...
- 修改SQL Server中的计算机名
安装SQL Server之后,如果修改计算机名会导致登录异常,或者某些功能不能用,例如配置Replication时会提示如下错误: SQL Server replication requires th ...
- Paper | Non-local Neural Networks
目录 1. 动机 2. 相关工作 3. Non-local神经网络 3.1 Formulation 3.2 具体实现形式 3.3 Non-local块 4. 视频分类模型 4.1 2D ConvNet ...
- Java连载46-Java中的多态
一.多态的语法 1.关于多态中涉及到几个概念 (1)向上转型(upcasting) 子类型转换为父类型,又被称为自动类型转换 (2)向下转型(downcasting) 父类型转换为子类型,又被称为强制 ...
- 实时聊天-websocket与ajax的区别于联系
Ajax是什么? Ajax,即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整 ...
- LeetCode | 2 的幂
LeetCode 题库的第 231 题 —— 2 的幂 这题也是比较容易的一题,前提是找到规律即可.如果从 10 进制的角度观察 2 的幂次方,可能并不容易发现规律,那么可以从 2 进制的角度进行观察 ...
- PyCharm 2017: Remote debugging using remote interpreter doesn't work
I set up a remote interpreter and verified that I can run a script using the remote interpreter. Con ...
- vue拖拽组件开发
vue拖拽组件开发 创建临时vue项目 先查看node和npm版本,怎么安装就不多多bb了 再安装vue-cli npm install vue-cli -g //全局安装 vue-cli 检测是否安 ...