我面试的几道算法题
2010-09-15 10:39
399 查看
1.输入如下字符串3a/4b/5c,通过处理输出aaa/bbbb/ccccc
/**
*3a/4b/5c
*aaa/bbbb/ccccc
* @param str
* @return
*/
public static String reverseString(String str){
String[]arrstr = str.split("/");
StringBuffer sb = new StringBuffer();
for(int i = 0; i < arrstr.length; i++){
if(arrstr[i].length() == 1){
sb.append(arrstr[i]);
}else{
String num = arrstr[i].substring(0, 1);
String str2 = arrstr[i].substring(1,2);
if(Pattern.compile("^//d{1}$").matcher(num).matches()){
int num2 = Integer.parseInt(num);
for(int j = 0; j<num2; j++){
sb.append(str2);
}
}else{
sb.append(arrstr[i]);
}
}
if(!( i == (arrstr.length -1))){
sb.append("/");
}
}
System.out.println("字符串/'"+str+"/':被转换成了如下字符串:");
return sb.toString();
}
2..输入如下字符串aaa/bbbb/ccccc,通过处理输出3a/4b/5c
/**
*aaa/bbbb/ccccc
* 3a/4b/5c
* @param str
* @return
*/
public static String reverseString2(String str){
String[] arrstr = str.split("/");
StringBuffer sb = new StringBuffer();
for(int i = 0; i < arrstr.length; i++){
if(arrstr[i].length() == 1)
sb.append(arrstr[i]);
else{
String char2 = arrstr[i].substring(1, 2);
sb.append(""+arrstr[i].length()+""+char2);
}
if(!( i == (arrstr.length -1))){
sb.append("/");
}
}
System.out.println("字符串/'"+str+"/':被转换成了如下字符串:");
return sb.toString();
}
3.写一个文件搜索方法实现对某个指定磁盘的文件搜索
public static void dir(File file) throws IOException{
File[] allFile = null;
if(file.isDirectory()){
allFile = file.listFiles();
for(int i =0; i < allFile.length; i++){
if(!allFile[i].isDirectory()){
String fileName = allFile[i].getName();
String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
System.out.println("文件:"+fileName+"--------的后缀名是:"+"/'"+extension+"/'");
if(extension.equals(".txt")){
FileInputStream inputStream = new FileInputStream(allFile[i]);
File f = new File("e://test.txt");
FileOutputStream outputStream = new FileOutputStream("e://test.txt");
BufferedOutputStream bout = new BufferedOutputStream(outputStream);
byte[] bs = new byte[1024];
int index = -1;
while((index = inputStream.read(bs)) != -1){
outputStream.write(bs, 0, index);
}
}
}else{
//递归
dir(allFile[i]);
}
}
}else{
System.out.println(file.getName());
}
}
----------------------------------Test--------------------------------------
public static void main(String[] args) {
//System.out.println(test());
try {
dir(new File("F://ddd"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(reverseString("a/2b/3c/4d/efg"));
System.out.println(reverseString2("a/bb/ccc/dddd"));
}
/**
*3a/4b/5c
*aaa/bbbb/ccccc
* @param str
* @return
*/
public static String reverseString(String str){
String[]arrstr = str.split("/");
StringBuffer sb = new StringBuffer();
for(int i = 0; i < arrstr.length; i++){
if(arrstr[i].length() == 1){
sb.append(arrstr[i]);
}else{
String num = arrstr[i].substring(0, 1);
String str2 = arrstr[i].substring(1,2);
if(Pattern.compile("^//d{1}$").matcher(num).matches()){
int num2 = Integer.parseInt(num);
for(int j = 0; j<num2; j++){
sb.append(str2);
}
}else{
sb.append(arrstr[i]);
}
}
if(!( i == (arrstr.length -1))){
sb.append("/");
}
}
System.out.println("字符串/'"+str+"/':被转换成了如下字符串:");
return sb.toString();
}
2..输入如下字符串aaa/bbbb/ccccc,通过处理输出3a/4b/5c
/**
*aaa/bbbb/ccccc
* 3a/4b/5c
* @param str
* @return
*/
public static String reverseString2(String str){
String[] arrstr = str.split("/");
StringBuffer sb = new StringBuffer();
for(int i = 0; i < arrstr.length; i++){
if(arrstr[i].length() == 1)
sb.append(arrstr[i]);
else{
String char2 = arrstr[i].substring(1, 2);
sb.append(""+arrstr[i].length()+""+char2);
}
if(!( i == (arrstr.length -1))){
sb.append("/");
}
}
System.out.println("字符串/'"+str+"/':被转换成了如下字符串:");
return sb.toString();
}
3.写一个文件搜索方法实现对某个指定磁盘的文件搜索
public static void dir(File file) throws IOException{
File[] allFile = null;
if(file.isDirectory()){
allFile = file.listFiles();
for(int i =0; i < allFile.length; i++){
if(!allFile[i].isDirectory()){
String fileName = allFile[i].getName();
String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
System.out.println("文件:"+fileName+"--------的后缀名是:"+"/'"+extension+"/'");
if(extension.equals(".txt")){
FileInputStream inputStream = new FileInputStream(allFile[i]);
File f = new File("e://test.txt");
FileOutputStream outputStream = new FileOutputStream("e://test.txt");
BufferedOutputStream bout = new BufferedOutputStream(outputStream);
byte[] bs = new byte[1024];
int index = -1;
while((index = inputStream.read(bs)) != -1){
outputStream.write(bs, 0, index);
}
}
}else{
//递归
dir(allFile[i]);
}
}
}else{
System.out.println(file.getName());
}
}
----------------------------------Test--------------------------------------
public static void main(String[] args) {
//System.out.println(test());
try {
dir(new File("F://ddd"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(reverseString("a/2b/3c/4d/efg"));
System.out.println(reverseString2("a/bb/ccc/dddd"));
}
相关文章推荐
- 几道面试到的算法题
- 几道面试到的算法题
- 微软等数据结构+算法面试100题(22)--几道算数题
- 笔试面试算法经典--最长连续序列
- 代码面试最常用的10大算法
- [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
- 几道经典的数据结构算法代码实现(2)
- 【美团点评】无人驾驶算法工程师 2017-09-03电话面试
- 微软面试、经典算法、编程艺术、红黑树4大系列总结
- 【面试算法题】Java Stack 类的使用
- C++笔试面试(算法题集一)
- 【LeetCode-面试算法经典-Java实现】【199-Binary Tree Right Side View(从右边看二叉树)】
- 笔试+面试之数据结构与算法
- 算法面试:精选微软经典的算法面试100题(第21-25题)
- 【LeetCode-面试算法经典-Java实现】【001-Two Sum(求两个数的和)】
- 笔试面试----常见算法题
- 左程云面试算法学习——1.使用双栈(stack),获取当前序列最小值
- 微软等数据结构+算法面试100题全部答案集锦
- 网上看到几道面试小题,分享一下
- 【LeetCode-面试算法经典-Java实现】【011-ContainerWithMostWater(容纳最多的水)】