题目:
一个长字符串中含多个连续和不连续的空格,求不含空格的最长字符串长度,要求算法尽可能最优。例如输入:"a1 123# abc",结果:4;
package com;
import java.util.Random;
public class StringAlgorithm {
public static void main(String[] args) {
for (int i = 0; i < 1; i++) {
String s = randomString(i);
if(getMaxLength(s)!=getMaxLength1(s)){
System.out.println("算法有误");
System.out.println(s);
System.out.println(getMaxLength(s));
System.out.println(getMaxLength1(s));
}
}
}
/**
* 对数器算法
* @param str
* @return
*/
public static int getMaxLength(String str){
String [] arr = str.split("\\s+");
int result = 0;
for (int i = 0; i < arr.length-1; i++) {
result = Math.max(arr[i].length(),arr[i+1].length());
}
return result;
}
/**
* 本次算法
* @param str
* @return
*/
public static int getMaxLength1(String str){
char[] chars = str.toCharArray();
int maxLen = 0;
int count = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] != ' ') {
count ++;
} else if (chars[i] == ' ') {
maxLen = Math.max(count, maxLen);
count = 0;
}
}
maxLen = Math.max(count, maxLen);
return maxLen;
}
public static String randomString(int length){
String str = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 !@#$%^&*()";
Random random = new Random();
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(62);
stringBuffer.append(str.charAt(number));
}
return stringBuffer.toString();
}
}