和求a中有的字符而求b中没有的字符 如:a
解决方案 »
- 求两个数的最大公约数和最小公倍数
- long型和double型数 怎么写进文档 和输出啊 顺便帮看看 我那char型和string型 做法对不
- 高分求解 Spring http invoke + hibernate 实现CS结构
- 如何退出去啊?
- JTable里一列设置为JCheckBox出现的郁闷问题
- 有关多态方法调用的问题,谢谢解答!
- 为什么找不到jar包里的策略文件
- 求各位前辈帮个忙,帮我看一下这个代码.
- J2SE如何实现浮动面板?是不是用Frame嵌套?
- www.javacn.net正式开通敬请光临
- 还是老问题,在WIN98和2000中设置JAVA环境但是很奇怪
- ████████有那位高手对JAF比较熟,我有一个关于它的问题!
class Temp{
public static void main(String args[]){
String a = "abc";
String b = "ecf";
String output="";
outer:for(int i=0;i<a.length();i++){
for(int j=0;j<b.length();j++){
if(b.charAt(j)==a.charAt(i))
break outer;
}
output+=a.charAt(i);
}
System.out.print(output);
System.exit(0);
}
}
String a = "abcde";
String b = "cefbgh";
String allIn = "";
String aOnly = "";
String bOnly = "";
for(int i=0;i<a.length();i++){
if(b.indexOf(a.charAt(i))>=0){
if(allIn.indexOf(a.charAt(i))<0){
allIn += a.charAt(i);
}
}else{
if(aOnly.indexOf(a.charAt(i))<0){
aOnly += a.charAt(i);
}
}
} for(int j=0;j<b.length();j++){
if(allIn.indexOf(b.charAt(j))<0){
if(bOnly.indexOf(b.charAt(j))<0){
bOnly += b.charAt(j);
}
}
}
System.out.println("a特有的: " + aOnly);
System.out.println("b特有的: " + bOnly);
System.out.println("共有的: " + allIn);
}
String aA[]={"a","b","c","d"};
String bA[]={"a","d","f"};
String patten="[";
for(int i=0;i<bA.length;i++)
{
patten=patten+bA[i];
}
patten=patten+"]"; String tmpStr="";
for(int i=0;i<aA.length;i++)
{
tmpStr=tmpStr+aA[i];
}
tmpStr=tmpStr.replaceAll(patten,"");
System.err.println("tmpStr="+tmpStr);
还是使用传统的方法比较快。
import java.util.Arrays;
......
String a = "abcdefg";
String b = "bdfhj";
char[] achars = a.toCharArray(); //使用char比String快
char[] bchars = b.toCharArray();
Arrays.sort(achars); // 排序,便于下面二分查找
Arrays.sort(bchars);
//使用StringBuffer避免产生大量String对象
StringBuffer ab = new StringBuffer(); //ab共有
StringBuffer ap = new StringBuffer(); //a独有
StringBuffer bp = new StringBuffer(); //b独有
for (int i = 0; i < achars.length; i++) {
if (Arrays.binarySearch(bchars, achars[i]) < 0) { //二分查找
ap.append(achars[i]);
} else {
ab.append(achars[i]);
}
}
for (int i = 0; i < bchars.length; i++) {
if (Arrays.binarySearch(achars, bchars[i]) < 0) {
bp.append(bchars[i]);
}
}
System.out.println(ab);
System.out.println(ap);
System.out.println(bp);
{
public static void main(String[] args)
{
String a = "a,b,c";
String b = "e,c,f"; System.out.println("not in a: " + check(a, b, ','));
System.out.println("not in b: " + check(b, a, ','));
} public static String check(String a, String b, char ignore)
{
StringBuffer result = new StringBuffer();
boolean[] flags = new boolean[Character.MAX_VALUE];
flags[ignore] = true;
int len1 = a.length();
int len2 = b.length(); for (int i = 0; i < len1; i++)
flags[a.charAt(i)] = true; for (int i = 0; i < len2; i++)
{
char c = b.charAt(i);
if (!flags[c])
result.append(c);
}
return result.toString();
}
}
90%以上的空间都未使用!
而且,当一个数组过大,其下标操作速度也比较慢!
所以,没有实用性!
90%以上的空间都未使用!
而且,当一个数组过大,其下标操作速度也比较慢!
所以,没有实用性!--------------------------------
64K相对于现在机器的配置来说可以忽略不计。有什么证据能证明“当一个数组过大,其下标操作速度也比较慢”。我只知道flags[0]和flags[65535]的速度是一样的,就算是flags[65535 * 100],速度也不会有什么变化,对应到汇編的话还不都是一条语句。我这个方法好处在于:速度不会随字符串长度的增加而明显下降。
所以该算法只是对应n不是太大的情况。