方法不唯一,可以利用图画理解。
一、解题思路
先遍历原来的字符串str,取出str的每个字母作为一个新的字符串数组array的下标(下标为字母对应的ASCII值),字母在array位置的初始值为0,为0就将字母放入另一个字符串数组sb,然后要使0变为1,这样的话,下次再出现相同的字母就不会放到sb里面了,最后输出的sb就是按顺序输出没有重复字母的字符串了。
二、完整代码
1.主函数部分
public static void main(String[] args) {
//按顺序输出字符串,重复的只输出一次
Scanner in = new Scanner(System.in);
//多组输入
while(in.hasNextLine()){
String str = in.nextLine();
String ret = func(str);
System.out.println(ret);
}
2.代码实现部分
public static String func(String str){
StringBuilder sb = new StringBuilder();//sb为接收的新的字符串
int[] array = new int[127];//46个字母包括大小写,最大的ASCII码值是z的122
//array用来判断字母是否重复
//遍历原来的字符串
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);//ch接收每个字符
if(array[ch]==0){ //array[ch]中的ch已经转变为字母的ASCII码值
sb.append(ch); //append将指定字符串添加到sb里面
array[ch]=1; //此时的array的所在位置变为1,到遍历字符串再次出现这个字母时,不会再添加到要输出的字符串中str
}
}
return sb.toString();
}
补充:
1)StringBuilder :
StringBuilder是Java中的一个可变字符串类,它提供了许多方便的操作字符串的方法。
在这里的两个作用:
-
创建一个StringBuilder对象: StringBuilder sb = new StringBuilder();
-
向StringBuilder中添加字符: sb.append();
2)charAt:
charAt()是JavaScript中的字符串方法,用于返回指定索引位置的字符。
在这里的作用:
返回str每个字母:string.char(i);
总结
这道题用到的方法时间复杂度为O(n),是比较好的解题方法了,不过要充分理解还需要借助图画,以及对一些类的方法要充分熟悉,建议初学者对这个解题思路多看几遍,上手敲代码,理解才能更深入和收获更多。