Java 按长度降序排列单词
要求: 编写一个程序来接受一个字符串,并在不使用数组的情况下按长度降序打印单词 例如: 输入=我爱我的国家印度 输出=国家印度爱我的我 我曾尝试使用嵌套循环来解决这个问题,但对于较大的输入来说,这需要时间。建议一个更好的替代算法Java 按长度降序排列单词,java,Java,要求: 编写一个程序来接受一个字符串,并在不使用数组的情况下按长度降序打印单词 例如: 输入=我爱我的国家印度 输出=国家印度爱我的我 我曾尝试使用嵌套循环来解决这个问题,但对于较大的输入来说,这需要时间。建议一个更好的替代算法 //Input=I love my country India //Output=country India love my I public static void main(String[] JVJplus) { String s,temp="&q
//Input=I love my country India
//Output=country India love my I
public static void main(String[] JVJplus)
{
String s,temp="",newS="";
int i,j;
System.out.print("Entet s=");
s=in.nextLine()+" ";
for(i=s.length();i>0;i--)
{
for(j=0;j<s.length();j++)
{
char c=s.charAt(j);
if(c!=' ')
temp+=c;
else
{
if(temp.length()==i)
newS+=temp+" ";
temp="";
}
}
}
System.out.println("Output="+newS);
}
//Input=我爱我的祖国印度
//输出=国家印度爱我的我
公共静态void main(字符串[]JVJplus)
{
字符串s,temp=“”,newS=“”;
int i,j;
系统输出打印(“Entet s=”);
s=in.nextLine()+“”;
对于(i=s.length();i>0;i--)
{
对于(j=0;j如果不允许使用数组,那么regex呢
因此,我们的想法是使用一个带有临时int变量i
的for循环,该变量用输入字符串的长度初始化,每次迭代减少1
在循环中,我们使用正则表达式检查输入
字符串是否包含长度为i的任何单词,这是正则表达式\\b\\w{“+i+”}\\b
匹配的:精确的i
连续单词字符(=长度为i的任何单词)
最后,如果有匹配项,我们将它们打印到sysout
我们从i=input.length()
开始,因为我们首先需要最长的单词,而且可能整个输入字符串都是一个单词
String input = "I love my country India";
for (int i = input.length(); i > 0 ; i--) {
Matcher m = Pattern.compile("\\b\\w{"+i+"}\\b").matcher(input);
while(m.find()){
System.out.print(m.group(0) +" ");
}
}
打印country India love my I
您可以使用LinkedHashMap(如果单词长度相同,您希望根据插入顺序对其排序),否则您也可以使用HashMap
我已经使用LinkedHashMap作为解决方案
Input: "I love my country India"
解决方案:
String sentence = "I love my country India";
StringBuilder sb = new StringBuilder();
LinkedHashMap<String, Integer> hm = new LinkedHashMap<String, Integer>();
for(String word : sentence.split(" ")){
hm.put(word, word.length());
}
hm.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue(Comparator.reverseOrder()))
.forEach(e->{
sb.append(e.getKey() + " ");
});
String result = sb.substring(0).trim();
System.out.print(result);
在这种情况下,使用HashMap将给出相同的输出,因为字符串中没有相同长度的字。不使用数组
意味着没有数组、数组列表、比较器可以作为解决方案的一部分?如果所有这些都被禁止,那么您的解决方案可能就足够了。我同意elefasGR。请记住:yo您正在询问如何改进工作代码。此类请求可以/应该访问codereview.stackexchange.com…并记住:这一“难题”的全部要点就是不要使用数组。从这个意义上说:无论如何,你不会解决那么多的问题;所以你真的不需要太担心你的解决方案的性能。换句话说:你必须以某种方式“补偿”不能使用数组。毫不奇怪,一个节省内存的解决方案需要“更多”cpu周期!扮演恶魔的倡导者,字符串在技术上不是字符的“数组”吗?您使用这个“数组”时使用:char c=s.charAt(j);问题肯定有点模糊?elefasGR假设比较器被排除在外…为什么?使用SortedSet的解决方案如何?集合是集合,而不是数组、列表等。。。
Output: "country India love my I"