华为上机 字符串合并处理 java
2016-09-06 21:04
381 查看
空间限制:32768K
本题知识点: 字符串 排序
算法知识视频讲解
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”
接口设计及说明:
/*
功能:字符串处理
输入:两个字符串,需要异常处理
输出:合并处理后的字符串,具体要求参考文档
返回:无
*/
void ProcessString(char* str1,char *str2,char * strOutput)
{
}
输入描述:
输出描述:
输入例子:
输出例子:
代码:
本题知识点: 字符串 排序
算法知识视频讲解
题目描述
按照指定规则对输入的字符串进行处理。详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”
接口设计及说明:
/*
功能:字符串处理
输入:两个字符串,需要异常处理
输出:合并处理后的字符串,具体要求参考文档
返回:无
*/
void ProcessString(char* str1,char *str2,char * strOutput)
{
}
输入描述:
输入两个字符串
输出描述:
输出转化后的结果
输入例子:
dec fab
输出例子:
5D37BF
代码:
package com.huawei; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Scanner; public class 字符串合并处理 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String str1 = sc.next(); String str2 = sc.next(); System.out.println(processString(str1, str2)); } } public static String processString(String str1, String str2) { String str = str1 + str2;// 合并字符串 List<Character> list_odd = new ArrayList<>(); List<Character> list_even = new ArrayList<>(); //按照奇数位偶数位分割 for (int i = 0; i < str.length(); i++) { if (i % 2 == 0) { list_even.add(str.charAt(i)); } else { list_odd.add(str.charAt(i)); } } //对分割后的分别排序 Collections.sort(list_odd); Collections.sort(list_even); //重新合并 char[] array1 = new char[str.length()]; int j = 0, k = 0; for (int i = 0; i < array1.length; i++) { if (i % 2 == 0) { array1[i] = list_even.get(j++); } else { array1[i] = list_odd.get(k++); } } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array1.length; i++) { //对每一位进行转换,此处使用数表转换 sb.append(change1(array1[i])); } return sb.toString(); } private static char change1(char a) { char res; switch (a) { case '0': res = '0'; break; case '1': res = '8'; break; case '2': res = '4'; break; case '3': res = 'C'; break; case '4': res = '2'; break; case '5': res = 'A'; break; case '6': res = '6'; break; case '7': res = 'E'; break; case '8': res = '1'; break; case '9': res = '9'; break; case 'A': res = '5'; break; case 'B': res = 'D'; break; case 'C': res = '3'; break; case 'D': res = 'B'; break; case 'E': res = '7'; break; case 'F': res = 'F'; break; case 'a': res = '5'; break; case 'b': res = 'D'; break; case 'c': res = '3'; break; case 'd': res = 'B'; break; case 'e': res = '7'; break; case 'f': res = 'F'; break; default: res = a; } return res; } private static char change(char c) { char t = c; if (c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f') { t = reverseOrder(c); } return t; } /** * 待完善 自己实现如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作, * 并转换为相应的大写字符。 * * @param c * @return */ private static char reverseOrder(char c) { String str = Integer.toHexString((int) c); char[] chars = str.toCharArray(); Collections.reverse(Arrays.asList(chars)); return 0; } }
相关文章推荐
- 华为上机题整理1——Java实现
- 2014华为上机题
- 华为上机——字串的连接最长路径查找
- 华为上机--求最小公倍数
- 华为上机--放苹果
- Java - 华为上机 - 汽水瓶
- 华为上机 单词倒排 java
- 2017年3月17日华为内推上机考试
- Android—如何使用Eclipse svn插件管理Android项目
- JAVA基础6.32——构造代码块
- 初涉java(swing常用组件及绘图原理)
- <设计模式12>组合模式
- 【Spring】解决 @ResponseBody返回中文字符串乱码以及生僻字被强制以unicode方式显示问题
- Java算法--二分查找
- java全面的知识体系结构总结
- spring framework源码下载并导入eclipse
- 比较全面的Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)
- java内存泄漏分类及避免
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- Java 两个变量的值互相交换