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 实例 以下实例中我们通过字符串函 ...
随机推荐
- python【第十一篇】消息队列RabbitMQ、缓存数据库Redis
大纲 1.RabbitMQ 2.Redis 1.RabbitMQ消息队列 1.1 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议 ...
- 将图片文件转换为.py文件
最近用wxpython写了一个脚本,其中要给窗体设置图标文件,需要单独的一个ico文件,这样就比较影响美观,另外打包的时候还要将图标文件一起打包很繁琐.这时候看到wxpython文件有一个工具img2 ...
- 编译hadoop版的hello,world
cd ~/src mkdir classes javac -classpath ~/hadoop-/hadoop--core.jar WordCount.java -d classes jar -cv ...
- 关于.NET的配置文件
无论是exe文件还是dll文件,都可以添加App.config文件,里面设置配置信息.比如<appSettings></appSettings>之间,可以加入Key-Value ...
- websphere性能设置和日常维护
一. 确认磁盘空间是否满足要求1. WebSphere 应用服务器自身代码的占用空间.这个空间一般在1G左右,在不同的系统平台上略有差异. 2. 概要文件所占的空间.WebSphere应用服务器V6. ...
- mac下设置命令别名
项目使用了gerrit,每次push代码都需要执行 git push origin HEAD:refs/for/master 为了简便,使用了alias命令来控制台下使用下面的命令简化了提交. ali ...
- Android 中LocalBroadcastManager的使用方式
Android 中LocalBroadcastManager的使用方式 在android-support-v4.jar中引入了LocalBroadcastManager,称为局部通知管理器,这种通知的 ...
- easy_install和pip区别
easy_insall的作用和perl中的cpan, ruby中的gem类似,都提供了在线一键安装模块的傻瓜方便方式,而pip是easy_install的改进版, 提供更好的提示信息,删除packag ...
- css的定位机制
牛腩新闻发不系统中遇到了CSS(Cascading style sheets),第一次接触,比较陌生还!因为CSS很多关于元素定位的问题,并且很多情况下元素的位置以像素精度计.一个不小心就很头疼,为此 ...
- 使用Git将本地代码上传到GitHub
#1注册GitHub账号 *1)到https://github.com/注册GitHub账号 #2在GitHub上建立GitHub仓库 *1)登录后点击右下方的"new repository ...