我有一个很大的字符串,如“墙壁大厅到墙壁大厅坠落”,我想要打印最长的字符串。然后我想知道所有最长的字符串重复多少次?
例如,最长的字符串是:
墙重复2
大厅重复2
跌倒重复1
这是我的代码:
public void bigesttstring(String str){
String[] wordsArray=str.split(" ");
int n= str.trim().split("\\s+").length;
int maxsize=0;
String maxWord="";
for(int i=0;i<wordsArray.length;i++){
if(wordsArray[i].length()>maxsize){
maxWord=wordsArray[i];
maxsize=wordsArray[i].length();
}
}
System.out.println("Max sized word is "+maxWord+" with size "+maxsize);
}
但此代码仅打印“墙”。
for count repeated String(我的意思是“maxWord”),此代码写:
int count=0;
for(int i=0;i<wordsArray.length;i++){
if(maxWord.equals(wordsArray[i])){
count++;
}
}
并显示其他最长的字符串我有这段代码:
int k=0;
for(int i=0;i<wordsArray.length;i++){
if(maxWord.equals(wordsArray[i])){
continue;
}
if(maxsize==wordsArray[i].length()){
k++;
}
}
String[] other=new String[k];
int o=0;
for(int i=0;i<wordsArray.length;i++){
if(maxWord.equals(wordsArray[i])){
continue;
}
if(maxsize==wordsArray[i].length()){
other[o]=wordsArray[i];
o++;
}
}
我允许使用此功能:
char char At(int i);
int ComoareTo(String another string);
boolean endsWith(String suffix);
int indexof();
int indexof(String str);
String substring();
char[] toCharArray();
String lowercase();
并希望像这样的其他代码用于最短的字符串。
答案 0 :(得分:0)
你写过
if(wordsArray[i].length()>maxsize)
对于wall, hall and fall
,仅适用于first wall
。这就是你得到wall and size 4
的原因。
在这里,您不会考虑不同字符串的最长字符串长度可能相同。您必须在array
中存储最长的字符串,而if condition
应该
if(wordsArray[i].length()>=maxsize)
你会单独考虑= and >
个案。因为在>
的情况下,您必须delete all the string in array
。
答案 1 :(得分:0)
您需要将其更改为相等,因为当前如果单词与当前最大单词的长度相同,则会忽略它。如果你想要它有最大的话。您需要将它们存储在一个数组中。我在这里实现了它。
package OtherPeoplesCode;
public class string {
public static void main(String[] args) {
bigeststring("wall hall to wall hall fall be");
}
public static void bigeststring(String str){
String[] wordsArray=str.split(" ");
String[] biggestWordsArray = new String[wordsArray.length];
int x = 0;
int n= str.trim().split("\\s+").length;
int maxsize=0;
String maxWord="";
for(int i=0;i<wordsArray.length;i++){
if(wordsArray[i].length()>maxsize){
maxWord=wordsArray[i];
maxsize=wordsArray[i].length();
for(int y = 0; y <= biggestWordsArray.length -1; y++){
biggestWordsArray[y] = "";
}
}
else if(maxsize==wordsArray[i].length()){
biggestWordsArray[x] = wordsArray[i];
x++;
}
}
if(biggestWordsArray[0].equals("")){
System.out.println("Max sized word is "+maxWord+" with size "+maxsize);
}
else if(!(biggestWordsArray[0].equals(""))){
System.out.println("TIE!");
for(int y = 0; y <= biggestWordsArray.length -1; y++){
if(!(biggestWordsArray[y].equals(""))){
System.out.print("Word #" + y + " is ");
System.out.println(biggestWordsArray[y]);
}
}
}
}
}
编辑:这是工作代码,对延迟感到抱歉。
答案 2 :(得分:0)
使用Map
可能是最直接,最简单的方法。但是,如果你说你的老师不允许你使用它,你可以告诉我们什么是允许的吗?因此,我们最终不会浪费时间建议不同的方法,最终没有一个是可以接受的,因为你的老师不允许。
我可以建议你尝试一种最蛮力的方法(很多优化的地方,但我认为你可能想要最简单的方法):
在伪代码中:
String[] wordList = ....;
int maxLen = 0;
int maxLenOccurence = 0;
foreach word in wordList {
if word is longer then maxLen {
maxLen = word's length
maxLenOccurence = 1;
}
else if word's length is equals to maxLen {
maxLenOccurence ++
}
}
// 2,3
String[] maxLenWordList = new String[maxLenOccurence];
foreach word in wordList {
else if word's length is equals to maxLen {
for i = 0 to maxLenWordList length {
if (maxLenWordList[i] == word)
break
if (maxLenWordList[i] == null
maxLenWordList[i] = word
}
}
//4
foreach maxLenWord in maxLenWordList {
count = 0
foreach word in wordList {
if maxLenWord == word
count ++
}
display "Max sized word is "+ maxLenWord + " with size " + count
}
另一种不涉及其他数据结构的方式是:
答案 3 :(得分:-1)
您也可以使用它;
String[] allLongestStrings(String[] inputArray) {
List<String> list = new ArrayList<String>();
int max = 0;
for (int i = 0; i < inputArray.length; i++) {
StringBuilder s = new StringBuilder(inputArray[i]);
int n = s.length();
if (n > max) {
max = n;
}
}
for (int i = 0; i < inputArray.length; i++) {
StringBuilder s = new StringBuilder(inputArray[i]);
int n = s.length();
if (n == max) {
list.add(s.toString());
}
}
return list.toArray(new String[list.size()]);
}