TopCoder SRMS 1 字符串处理问题 Java题解
Problem Statement |
|||||||||||||
|
Let's say you have a binary string such as the following: 011100011 One way to encrypt this string is to add to each digit the sum of its adjacent digits. For example, the above string would become: 123210122 In particular, if P is the original string, and Q is the encrypted string, then An encrypted string given to you in this format can be decoded as follows (using
Now we repeat the process, assuming the opposite about P[0]:
Note that this algorithm produces at most two decodings for any given encrypted string. There can never be more than one possible way to decode a string once the first binary digit is set. Given a String message, containing the encrypted string, return a String[] with exactly two elements. The first element should contain the decrypted string assuming the first character is '0'; the second element should assume the first character |
|||||||||||||
Definition |
|||||||||||||
|
|||||||||||||
Limits |
|||||||||||||
|
|||||||||||||
Constraints |
|||||||||||||
| - | message will contain between 1 and 50 characters, inclusive. | ||||||||||||
| - | Each character in message will be either '0', '1', '2', or '3'. | ||||||||||||
Examples |
|||||||||||||
| 0) | |||||||||||||
|
|||||||||||||
| 1) | |||||||||||||
|
|||||||||||||
| 2) | |||||||||||||
|
|||||||||||||
| 3) | |||||||||||||
|
|||||||||||||
| 4) | |||||||||||||
|
|||||||||||||
| 5) | |||||||||||||
|
|||||||||||||
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.
计算有多少种解密字符串,由于是01串。故此仅仅能最多有两种了。
才第二次使用Java解题。会不会像是披着Java外壳的C++程序呢?
实际体会:
C++转Java倒真的不难,最大的难点就是要知道怎样使用Java的一些函数,比方本题的string处理,假设使用C++自然是直接加或者使用VC的直接push_back。只是Java好像有个什么StringBuilder类,这里我直接+=接起来了。
故此C++转Java的问题实际上是记忆问题,不存在理解问题了,由于Java有的概念,C++差点儿相同都有。理解障碍就没有了。
最后大家都熟悉的略微有点争论的一个结论:仅仅要熟悉一种语言,那么学其它语言就会非常轻松了。
我个人是支持这个结论的。前提是要知道“熟悉”这两个字的分量。
看过两本C++经典书就说自己熟悉C++是不正确的。就像看过算法导论就说自己懂算法也是不正确的,须要大量的练习。思考,深刻地体会。
public class BinaryCode {
private boolean equ(int a, int b) {
return a == b;
}
public String[] decode(String ms) {
String rs[] = new String[2];
if (ms.isEmpty())
return rs;
rs[0] = getCode(ms, "0");
rs[1] = getCode(ms, "1");
//check the end bit
int n = rs[0].length();
int a = rs[0].charAt(n-1) - '0';
int b = n > 1?
rs[0].charAt(n-2) - '0' : 0;
if (a + b + '0' != ms.charAt(ms.length()-1)) rs[0] = "NONE";
n = rs[1].length();
a = rs[1].charAt(n-1) - '0';
b = n > 1? rs[1].charAt(n-2) - '0' : 0;
if (a + b + '0' != ms.charAt(ms.length()-1)) rs[1] = "NONE";
return rs;
}
String getCode(String ms, String dec) {
int n = ms.length();
if (equ(1, n))
return dec;
dec += String.valueOf(ms.charAt(0) - dec.charAt(0));
//每次是计算i下标的下一个char,故此仅仅须要循环到n-1就能够了
for (int i = 1; i < n - 1; i++) {
int a = dec.charAt(i - 1) - '0';
int b = dec.charAt(i) - '0';
int c = ms.charAt(i) - '0';
int d = c - a - b;
if (!equ(0, d) && !equ(1, d)) return "NONE";
dec += String.valueOf(d);
}
return dec;
}
}
public class Main {
public static void main(String[] args) {
BinaryCode bc = new BinaryCode();
String[] str = bc.decode("123210122");
System.out.print(str[0] + '\n' + str[1]);
}
}
TopCoder SRMS 1 字符串处理问题 Java题解的更多相关文章
- 【剑指offer】(第 2 版)Java 题解
[剑指offer](第 2 版)Java 题解 第一章 面试的流程 略... 第二章 面试需要的基础知识 面试题 1. 赋值运算符函数 面试题 2. 实现 Singleton 模式 Solution ...
- paip.字符串操作uapi java php python总结..
paip.字符串操作uapi java php python总结.. java and php 相互转换.. import strUtil>>> requiry(strUtil.p ...
- C#版(击败100.00%的提交) - Leetcode 151. 翻转字符串里的单词 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- Java-Runoob-高级教程-实例-字符串:06. Java 实例 - 字符串查找
ylbtech-Java-Runoob-高级教程-实例-字符串:06. Java 实例 - 字符串查找 1.返回顶部 1. Java 实例 - 字符串搜索 Java 实例 以下实例使用了 Strin ...
- Java-Runoob-高级教程-实例-字符串:05. Java 实例 - 字符串反转
ylbtech-Java-Runoob-高级教程-实例-字符串:05. Java 实例 - 字符串反转 1.返回顶部 1. Java 实例 - 字符串反转 Java 实例 以下实例演示了如何使用 J ...
- Java-Runoob-高级教程-实例-字符串:04. Java 实例 - 字符串替换
ylbtech-Java-Runoob-高级教程-实例-字符串:04. Java 实例 - 字符串替换 1.返回顶部 1. Java 实例 - 字符串替换 Java 实例 如何使用java替换字符串 ...
- Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符
ylbtech-Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符 1.返回顶部 1. Java 实例 - 删除字符串中的一个字符 Java 实例 以 ...
- Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置
ylbtech-Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置 1.返回顶部 1. Java 实例 - 查找字符串最后一次出现的位置 Jav ...
- Java-Runoob-高级教程-实例-字符串:01. Java 实例 – 字符串比较
ylbtech-Java-Runoob-高级教程-实例-字符串:01. Java 实例 – 字符串比较 1.返回顶部 1. Java 实例 - 字符串比较 Java 实例 以下实例中我们通过字符串函 ...
随机推荐
- PHP扩展Redis编译安装
PHP扩展Redis编译安装 1.下载PHP官方Redis源码包 wget http://pecl.php.net/get/redis-2.2.4.tgz 注:我用的是Redhat系统,ubunt ...
- typedef 类型重命名 和 #define 宏定义(1)
http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等.在C语 ...
- iOS应用如何支持IPV6-b
果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6,以及应用中哪 ...
- 常用machine learning数据集
ImageNet:非商业化的可视化大数据 截止到2015年5月1日,ImageNet数据库拥有超过1500万的图像. cifar10:10类物体识别数据集 数据集中包含60,000幅32*32图像,共 ...
- Hive的MoveTask错误
最近在部署Hive上线,结果在线上线下同时出现了MoveTask报错的现象,虽然两者错误的日志以及错误信息一样,但是经过分析解决又发现两者的原因是不一样的. 首先线下的错误日志: 2015-05-18 ...
- hibernate中的缓存机制
一.为什么要用Hibernate缓存? Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源中的数 ...
- 【解决】Maven myeclipse出现Could not find the main class
maven报错:maven org/codehaus/plexus/classworlds/launcher/Launcher (Unsupported major.m...) 解决思路如下: 按照以 ...
- 如何使用 Laravel Facades ?
Facade 布局是在面向对象编程中经常使用的一种软件设计布局方式.Facade 实际上是一种包括复杂函数库的类,提供了更加简洁易读的接口.Facade 布局还能为一组结构复杂.设计简陋的 API 提 ...
- CAD文件导入AD09
1.首先将CAD图纸倒出为DXF格式的文件. 2.在altium designer 的pcb编辑中点菜单文件--导入,在弹出的对话框中,选择导入文件的类型,选择 DWG,DXF类型.然后确定,再弹出的 ...
- Android 中的MVC与数据流动
今天看了一个Android的Training生命周期转换的例子,顿觉得他的设计非常巧妙,我的分析如下: 1.在com.example.android.lifecycle包中有: 3个正常的全屏acti ...