/**
*1将字符串中"ac"删除
*2将字符串中"b"删除
*3最好只有一次遍历
* @author lenovo
*
*/
标准答案,,,还是老师的思路牛X,看完代码五体投地
改进思路:数组cs[],遍历,满足条件的赋给targets[],不满足条件的剔除
public static void main(String[] args) {int k=0;
String str="aabbbbbbbccabcasdfghjk";
char cs[]=str.toCharArray();
char targets[]=new char[cs.length];
for(int i=0;i<cs.length;i++){
if(cs[i] != 'b'){
if(cs[i] != 'c' ){
targets[k]=cs[i];
k++;
}else if(k!=0 &&targets[k-1] =='a'){
k--;
}
}else{
}
}
String str1=new String(targets,0,k);
System.out.println("------------>"+str1);
}
}
最初做题时遇到的问题:如何能够只进行一次遍历
自己写的代码: (后边元素前置时用到无数次遍历)
package com.zzuqg.java10.follow;// 思路: 字符串中寻找最长子字符串,, asdfghjsd
// 遇到的问题:输出数据出现错位 解决方法:用dataIndex替换cs.length
public class Work1 {
public static void main(String[] args) {
String str="abcdefg";
int dataIndex;
char[] cs=str.toCharArray();
dataIndex=cs.length;//7
for(int i=0;i<dataIndex;i++){
if(cs[i]=='b'){ //查找'b'在字符数组中的位置
for(int j=i;j<dataIndex-1;j++){ //'b'后面的元素逐个往前移动
cs[j]=cs[j+1];
}
dataIndex--;
if( i!=0 && cs[i-1]=='a' && cs[i]== 'c' ){ //寻找'ac'的位置
for(int j=i-1;j<dataIndex-2;j++){ //删除'ac'
System.out.println("....");
cs[j]=cs[j+2];
}
dataIndex -= 2;
}else{
}
}
if(cs[i]=='a' && cs[i+1]=='c'){ //遇到的问题:该段if判断语句输出结果不正确 解决方法:将 || 换为 &&
for(int j=i;j<dataIndex-2;j++){
cs[j]=cs[j+2];
}
dataIndex -=2;
}
}
for(int i=0;i<dataIndex;i++){
System.out.println(cs[i]);
}
}
}