项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
遇到这样一个问题:如果统计一段由字符和和空格组成的字符串中有多少个单词?
经典的解答方式为状态机的方法。
直接看代码吧,相关的解题思路已经在注释中:
package leilei.bit.edu.stacktest;
public class WordCountOfState {
public enum State {
INIT_STATE,WORD_STATE,SPACE_STATE
}
public static int word_count(String sentence) {
int count = 0;
State state = State.INIT_STATE;
char[] values = sentence.toCharArray();
char[] values_add_end = new char[values.length+1];
System.arraycopy(values, 0, values_add_end, 0, values.length);
//以'\n'标志结束状态
values_add_end[values_add_end.length-1] = '\n';
for(char each:values_add_end) {
switch(state) {
/*
* 初始状态:如果输入为空格,进入空格状态;如果为字符,进入字符状态,count+1;
*/
case INIT_STATE:
if(' ' != each) {
count++;
state = State.WORD_STATE;
}
else {
state =State.SPACE_STATE;
}
break;
/*
* 单词状态:输入为空格,进入空格状态;输入为字符,无任何操作;如果'\n',返回;
*/
case WORD_STATE:
if(' ' == each) {
state = State.SPACE_STATE;
} else if('\n' == each) {
return count;
}
break;
/*
* 空格状态:输入为空格,什么也不做;如果是字符,进入字符状态,count+1;如果'\n',返回。
*/
case SPACE_STATE:
if(' ' != each && '\n' != each) {
count++;
state = State.WORD_STATE;
} else if('\n' == each) {
return count;
}
break;
}
}
return count;
}
public static void main(String[] args) {
String sentence = " I love lucy and lili ";
int count = word_count(sentence);
System.out.println("All the words is: " + count);
}
}
结果为:
All the words is: 5