java查找字符串的公共前缀的最佳方法是什么?
我需要找到一种方法来查找字符串的公共前缀,例如:
字符串可以附加2或4个字符,如下所示:
你好 你好
但有时,字符串也可能以这样的方式结束:
你好 你好1122
但是现在通用的前缀是hello11,它应该只有hello。当只有一个字符串时,我还需要能够从字符串中获取hello
我在下面编写了以下代码,当所有字符串都是唯一的并且没有任何公共附加值时,它就可以工作
字符串前缀=”
if(listStrings.size() > 0) {
prefix = listStrings.get(0);
for(int i = 1; i < listStrings.size(); i++) {
String nextString = listStrings.get(i);
int j;
for(j = 0; j < Math.min(prefix.length(), listStrings.get(i).length()); j++) {
if(prefix.charAt(j) != nextString.charAt(j)) {
break;
}
}
prefix = listStrings.get(i).substring(0, j);
}
}
当以下输入为时,此代码生成hello:
你好 你好5678 hellothere
当以下输入为:
你好1122 你好 你好 你好,1134
我希望无论算法中输入了什么,输出都是“hello”
# 1 楼答案
如果需要获取不带数字的前缀,则可以执行以下操作:
# 2 楼答案
你的问题是,仅仅看各种各样的角色是错误的方法
你基本上说:我希望我的前缀不包含数字
换句话说:在收集max前缀时,一旦遇到与条件不匹配的第一个字符(似乎是:该字符代表一个数字),就应该停止查看任何字符串。您可以依赖Character类及其
isDigit()
方法来实现这一点但这里真正的要点是:你需要澄清你的需求。如果您不能清楚地表达“前缀”的确切定义,那么编写java代码是错误的优先级。换句话说:我们在这里谈论的是字母还是数字?空白区呢?纯“ASCII”还是任意Unicode
因此,真正的答案是:退后一步,在概念上下定决心什么是有效的前缀,什么确切地告诉你“前缀刚刚结束”