字符串基础习题(一)(java)
最近在复习一些基本知识,整理了一点字符串的基本习题,都比较基础,希望可以对小码们有点帮助,今天先更前半部分,预知后半如何,请看下回分解♪♪→→♚♚。
1.串内是否存在重复字符
基本思想:
- 开辟辅助数组记录每个字符的出现次数(该处开辟大小为128,用于存储128个ASCLL码),类似于对号入座
- 扫描字符串,如果当前字符在串中有记录,直接返回false,否则返回true
public static boolean checkNoRepeat(String instr)
{
if(instr.isEmpty())
return true;
int []temp=new int [128];
for (int i=0;i<instr.length();i++)
{
int c=(int)(instr.charAt(i));
if(temp[c]>0) return false;
else temp[c]++;
}
return true;
}
附:验证代码块
// eg1 验证
String str1="abcdefg";
String str2="abcdefff";
System.out.println(checkNoRepeat(str1));
System.out.println(checkNoRepeat(str2));
运行结果:
2.字符串翻转
基本思路:
- Method1:开辟等大的空间,倒序存储
- Method2:使用StringBuffer或者StringBuilder类中现有的API
注:自认为java和C最大的不同是java有很多现有的API 提供我们使用,使用现存的API在编程过程中会节约很多时间,所以掌握必要的一些API还是有必要的,大家可以上网查相应的API 库,如果不顺利可以留言分享给小码哟,希望对小码们有帮助
/****************************eg2 翻转字符串1*********************/
public static String reserveStr(String instr)
{
int len=instr.length();//记录输入的字符串长度
char []strc=new char[len];//开辟等长的字符数组
for(int i=0;i<len;i++)
{
strc[i]=instr.charAt(len-1-i); //字符串从后往前,对字符数组一一赋值
}
return new String(strc);
}
/****************************eg2 翻转字符串2——API*********************/
public static String reserveStr1(String instr)
{
StringBuffer sb=new StringBuffer(instr);//将String类型的字符串,转换为StringBuffer类型
return sb.reverse().toString();//直接使用StringBuffer 的API 的reserve()函数进行翻转,之后将StringBuffer转换为String(toString()函数)返回
}
//使用StringBuilder中的函数
public static String reserveStr2(String instr)
{
StringBuilder sb=new StringBuilder(instr);//将String类型的字符串,转换为StringBuilder类型
return sb.reverse().toString();//直接使用StringBuilder的API 的reserve()函数进行翻转,之后将StringBuffer转换为String(toString()函数)返回
}
附:验证代码块
// eg2 验证
String str1="abcdefg";
System.out.println(reserveStr(str1));
System.out.println(reserveStr1(str1));
System.out.println(reserveStr2(str1));
运行结果:
今天先更两道题吧,明天还更哟~
上文均属原创,若有错误还请小码们指正,定多加改正。