Java 字符逆序 华为_华为算法面试经典题目,各种字符串操作算法,快来收藏

本文介绍了五种常见的字符串操作算法,包括字符个数统计、字符串反转、句子逆序、字符串排序及合并表记录等。每种算法均附带Java代码实现,便于读者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

华为

华为

题目一:字符串个数统计

字符串个数统计一个很常用的算法。在字符串操作算法中,属于一个比较简单一些的算法题。但是如果进行扩展的话,还是可以难倒一大部分人的。下面开始看题目。

题目:编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。算法的Java实现代码如下所示:

202193548_2_20200915073252912

字符串个数统计

题目二:字符串反转

字符串翻转其实类似于入栈出栈的过程,后进先出。因此实现时,可以考虑用栈来实现。

题目:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)。下面我们写出该问题的Java代码实现方式,如下图:

202193548_3_2020091507325321

字符串反转

题目三:句子逆序

句子逆序和字符串翻转还是有一定的区别的,不过原理大致相同。也可以采取入栈出栈的方式。只不过句子是以单词为单位。

题目: 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”。所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符。该问题的Java代码实现如下:

202193548_4_20200915073253115

句子逆序

题目四:字符串的连接最长路径查询

这个题目看上去是不是感觉很难的样子?其实不难哦,下面给出一道题目你就知道了。

题目:给定n个字符串,请对n个字符串按照字典序排列。

输入描述: 输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。输出描述:‍‍数据输出n行,输出结果为按照字典序排列的字符串。本道题目的Java代码实现方式如下图:

202193548_5_20200915073253287

字符串的连接最长路径查询

题目五:合并表记录

这是今天分享的最有难度的一道题目了。也是今天分享的最后一道题目。

题目: 数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

输入:先输入键值对的个数,然后输入成对的index和value值,以空格隔开。输出描述:输出合并后的键值对(多行)。算法代码实现如下图所示:

202193548_6_20200915073253396

合并表记录

Java实现压缩与解压缩ZIP   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileInputStream;   import java.io.FileOutputStream;   import java.util.zip.ZipEntry;   import java.util.zip.ZipOutputStream;   public class Zip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   BufferedInputStream origin = null;   FileOutputStream dest = new FileOutputStream("E:\\test\\myfiles.zip");   ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(   dest));   byte data[] = new byte[BUFFER];   File f = new File("e:\\test\\a\\");   File files[] = f.listFiles();   for (int i = 0; i < files.length; i++) {   FileInputStream fi = new FileInputStream(files[i]);   origin = new BufferedInputStream(fi, BUFFER);   ZipEntry entry = new ZipEntry(files[i].getName());   out.putNextEntry(entry);   int count;   while ((count = origin.read(data, 0, BUFFER)) != -1) {   out.write(data, 0, count);   }   origin.close();   }   out.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }   解压缩的   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileOutputStream;   import java.util.Enumeration;   import java.util.zip.ZipEntry;   import java.util.zip.ZipFile;   public class UnZip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   String fileName = "E:\\test\\myfiles.zip";   String filePath = "E:\\test\\";   ZipFile zipFile = new ZipFile(fileName);   Enumeration emu = zipFile.entries();   int i=0;   while(emu.hasMoreElements()){   ZipEntry entry = (ZipEntry)emu.nextElement();   //会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。   if (entry.isDirectory())   {   new File(filePath + entry.getName()).mkdirs();   continue;   }   BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));   File file = new File(filePath + entry.getName());   //加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件   //而这个文件所在的目录还没有出现过,所以要建出目录来。   File parent = file.getParentFile();   if(parent != null &amp;&amp; (!parent.exists())){   parent.mkdirs();   }   FileOutputStream fos = new FileOutputStream(file);   BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);   int count;   byte data[] = new byte[BUFFER];   while ((count = bis.read(data, 0, BUFFER)) != -1)   {   bos.write(data, 0, count);   }   bos.flush();   bos.close();   bis.close();   }   zipFile.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值