请设计一个高效算法,再给定的字符串数组中,找到包含”Coder”的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照”Coder”出现的次数递减排列,若两个串中”Coder”出现的次数相同,则保持他们在原数组中的位置关系。
给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串的长度小于等于200。同时保证一定存在包含coder的字符串。
测试样例:
[“i am a coder”,”Coder Coder”,”Code”],3
返回:[“Coder Coder”,”i am a coder”]
package newCoder;
import java.util.*;
public class Coder {
public static void main(String args[])
{
Coder obj=new Coder();
String[] arr=new String[]{"coder","quvnkcoderoscoderspxqcoderboxlscoderxtzhcoderxdnccoderqjwcoderduhcoderfewpwcoderlhwlcoderrkexcoderqmmbcoderfbcoderuscoderocoderdhgvpcoderuoocoderiwircoder","yngfcodervcoderrazxcoderwwbcoderxxkqvcoderiruzmcoderbxcoderchcoderddutcoderecoderkbmcoderzcoderhcoderfoocoder","focoderqbnacoderkmnuicoderimdcoderwkcoderqsyhcoderfuzqcoderzsncodersigocoder","lhkscoder"};
obj.findCoder(arr,arr.length);
System.out.println(Arrays.toString(arr));
// Record[] arr=new Record[3];
// for(int i=0;i<3;i++)
// {
// arr[i]=new Record(0,i);
//
// }
// obj.buble(arr);
}
public String[] findCoder(String[] A, int n) {
Record[] arr=new Record[A.length];
for(int i=0;i<A.length;i++)
{
arr[i]=new Record(getCount(A[i].toLowerCase()),i);
}
buble(arr);
String[] result=new String[A.length];
for(int i=0;i<A.length;i++)
{
result[i]=A[arr[i].index];
}
return result;
}
public int getCount(String str)
{
int result=-1;
int begin=-1;
do
{
result++;
begin=str.indexOf("coder", begin+1);
}
while(begin!=-1);
return result;
}
public void buble(Record[] arr)
{
int flag=0;
for(int i=0;i<arr.length;i++)
{
flag=0;
for(int j=0;j<arr.length-1;j++)
{
if(arr[j].count<arr[j+1].count)
{
flag=1;
Record temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if(flag==0)
{
return;
}
}
}
}
class Record
{
public int count;
public int index;
public Record()
{
}
public Record(int count,int index)
{
this.count=count;
this.index=index;
}
}