您好,我目前正在处理HackerRank上的Java挑战,遇到了一个用我的代码无法解决的问题。
提示如下:,
给定一个字符串 s 和一个整数 k,完成该函数,以便它找到字典上长度 k 的最小和最大子字符串。
样本输入:
welcometojava
3
示例输出:
ava
wel
最小和最大的子字符串仅基于第一个整数。因此,对于我的解决方案,我决定创建一个整数数组,并使用 String s 中每个可用字符的整数值填充它。
我想一旦我对数组进行排序,index[0]将等于最小的第一个字母,而 index[s.length()-1] 将等于最大的第一个字母。从那里开始,只需将数组中的每个后续字符连接到相应的最小/最大,只要最小/最大
通过上面的示例输入,我能够返回最大“wel”。然而,最小的是返回一个空字符串,我不知道为什么。我从字面上遵循相同的方法来获取两个字符串的值,因此我认为最小值应该返回字符串值,无论所述值是否是正确的答案。
这是我的源代码。
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
int[] temp = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
temp[i] = (int) s.charAt(i);
}
Arrays.sort(temp);
char[] charArray = s.toCharArray();
// find smallest string
for (int i = 0; i < charArray.length; i++) {
if ((int) s.charAt(i) == temp[0]) {
while (i < k) {
smallest += String.valueOf(s.charAt(i));
i++;
}
}
}
// find largest string
for (int i = 0; i < charArray.length; i++) {
if ((int) s.charAt(i) == temp[s.length()-1]) {
while (i < k) {
largest += String.valueOf(s.charAt(i));
i++;
}
}
}
return smallest + "\n" + largest;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
int k = scan.nextInt();
scan.close();
System.out.println(getSmallestAndLargest(s, k));
}
基于您所拥有的,我认为您真的需要以这样一种方式映射字符,您排序前导字符,然后返回第一个和最后一个排序的字符。下面是对< code > getsmallestandmaximum 方法的修改。
public static String getSmallestAndLargest(String s, int k) {
List<String> lexList = new ArrayList<String>();
StringBuilder word;
if(s.length() < k) {
return s;
}
for(int i = 0; i < ((s.length() + 1) - k); i++) {
int j = i;
word = new StringBuilder();
while (j < (i + k)) {
word.append(s.charAt(j));
j++;
}
lexList.add(word.toString());
}
Collections.sort(lexList);
return lexList.get(0) + "\n" + lexList.get(lexList.size()-1);
}
对于行:(int)s.charAt(i)==temp[i],你的意思是temp[0]而不是temp[i]吗?if语句只有当两个字符串中的一个“welcometojava”和“aaceejlmootvw”在同一索引处具有相同的字母时才为真,这不会发生。
我想一旦我对数组进行排序,index[0]
将等于最小的第一个字母,而index[s.length()-1]
将等于最大的第一个字母。
是的。。。但这还不够。问题是最小的字母可以在原始字符串中多次出现。最大的字母也是如此。因此,当您在原始字符串中找到(例如)“a”
的实例时,您不知道它是否是最小的3个字符子字符串的开头。
有一个更简单的方法。
提示:如果你有一个由3个字符串组成的数组,你如何找到最小和最大的字符串?
问题内容: 我有以下代码: 该文件包含以下内容: 但是由于某种原因,每次都只返回一个空列表。 代码中可能存在愚蠢的错误或错字,但我只是找不到。提前致谢。 问题答案: 你读的文件 已经 和文件指针不是在 末尾 的文件。然后调用将不会返回数据。 仅读取一次文件: 另一种选择是在重新阅读之前先回到开头: 但这只是浪费CPU和I / O时间。 最好的办法是尝试和阅读 小 数据量,或寻求到了最后,通过采取文
我试图解决Leetcode上的二和算法: 给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。您可以假设每个输入都有一个解决方案,并且不能两次使用同一个元素。 我想到了这个: 问题是它没有返回任何内容,也没有返回打印的声明。有什么想法吗?
这是我的查看页面代码 我在codeigniter中检查codeigniter表单验证,它复制并粘贴了我的控制器,但出现了相同的错误 这是我的控制器代码 表单验证不返回任何内容和
问题内容: 我正在通过以下方式从Java代码启动Windows进程(用C ++编写,但没有源代码): 我的问题是,waitFor()方法永远不会结束。因此,我尝试在一个简单的shell中启动该过程,并以shell中的许多打印正确结束(我猜是标准输出)。 因此,即使我现在不需要这些输出,我还是决定创建并启动一个读取标准输出的线程。这解决了问题。 因此,我的问题是以下问题:该解决方案是“启动并等待具有
我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序) 在客户端我用vue cookie设置cookie 在服务器端,我使用CookieParser 所以,在应用程序。我有这样的代码 并且,在文件中,我有这样一个GET请求的代码 问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie 添加
当我试图对泛型类型执行TypedQuery时,我会从Eclipse得到一个未检查的类型转换警告。 我在这里使用泛型,因为在数据集中,由于查询和编辑的时间限制,每年都必须分离到不同的表中。表中有118年的数据(自1900年以来),我希望构建一个可以使用Java Reflections API每年扩展自己的系统。但是,这意味着在编译之前,我的父类不知道它们将对哪个子类或表进行操作。 下面是一些代码的示