字符串和数组
在字符串中找到第一个不重复的字符
比如说atioia中第一个不重复的字符就是t咯。从一般思路来说可以把每个 字符和他后面的字符都做比较,当到结尾时都没有相同的那就找到这个字符了,很明显是On2.
那还有一种方法,就是利用散列表和数组遍历一次通过统计相应键值也就是对应字符出现一次或者多次。第二次遍历原字符串,那对应值为一的即为所求了。数组下标和散列表键值选择的是对应字符转化成的整数。
首先,构建字符串散列表:
for每个字符
if没有当前字符,则存储1
否则,对当前统计字符数+1
其次,扫描字符串:
for每个字符
if散列表统计数为1则将其返回
if没有统计数唯一的字符,返回null
删除指定的字符
从一个字符串中删除包含另一个字符串的所有字符的情况。如internet删除ter就变成了inn。我们记internet为str,ter为remove。
比较容易想到的一种思路就是从头到尾遍历源字符串,然后遇到判断是否在删除的字符串里面存在,有的话就删除。很明显也是On2。
在一种就是和前面的不重复字符一个,通过构建一个字符为下标的flag数组,先设置str中所有字符的值为false,在遍历remove设置其中的字符值为true。之后再原数组中操作,当遇到false时操作,将之后的复制到前面来,因为如果是true的我们已经不需要了,之后返回一个比之前小的数组就好了。
public static String removeChars(String str, String remove){
char[] s = str.toCharArray();
char[] r = remove.toCharArray();
int src, dst = 0;
boolean[] flags = new boolean [128];
for( src = 0;src < r.length; ++src){
flags[r[src]] = false;
}
for(src = 0; src < s.length; ++src){
if(!flag[s[src]] s[dst ++] = s[src];
}
return new String(s, 0, dst);
}
反转单词
You are a girl反转成为gril a are you考虑先整体翻转为lirg a era uoy然后在每个单词都反转。
整数和字符串的转换
字符串到整数:每个字符减去“0”他就是相应的整数了,从左到右依次遍历字符串然后转化成相应的整数。每多遍历一个字符,就给前面的整数*10再加上现在这个整数就好了,比较简单。噢忘了,还要记得负号的处理。
开始时Number设置为0
If 第一个字符是“-”
从第二个字符开始,并设置负数标记
For 每个字符
number乘以10再加上字符减去“0”
If 有负数标记
取反
返回所需值
整数到字符串:设置一个缓冲区,然后每次给整数%10,取到末位之后加上“0”就是相应的字符了,还要给原整数/10去掉末位。这次同样要记得负号的处理,以及特殊值0的处理。
If number小于0
将number取反,并设置负数标记
do
将“0”加上number%10然后将结果写入缓冲区
Number /=10
While number不等于0
If 有负数标记
将“-”写入缓冲区
反向写出缓冲区的字符串