问题描述
提示:这大概就是一个字符串查询问题
这里需要找到最大的有序子字符串,其实就是通过ASCII来比较找到最大的字串就好。
难点分析:
提示:思路很简单,找到之后记录就好了,但是这里其实可以考虑一下如果两个子串的大小都为最大的,那么一个输出两个(个人觉得),但是我这里为了求快只是找到了最大的输出就完了,可以将这个改得更好:
首先,我分析题目,发现只需要写一个查找的方法基本就可以完成了,这里唯一的难点是数据的记录,不过Java有Map这个东西,直接找到储存就好了,之后调用工具类找到最大的问题就解决了。
/**
*
* @param text 这个是输入的字符串
* @return
*/
public static String matchMax(String text){
String tmp = "";
Map<Integer,String> map = new HashMap<>();
for (int i = 0; i < text.length()-1; i++) {
if(text.charAt(i)<text.charAt(i+1)){
tmp += text.charAt(i);
}
else {
tmp += text.charAt(i);
map.put(tmp.length(),tmp);
tmp = "";
}
}
//控制--》如果是从if中出来
if (tmp.length() > 0) {
tmp += text.charAt(text.length()-1);
map.put(tmp.length(), tmp);
}
int max = Collections.max(map.keySet());
return map.get(max);
}
代码:
提示:希望各位自己改一改,这个代码只是满足了题目,还有很多极端情况都没满足:
public class Lab22_1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a string: ");
String a = in.nextLine();
System.out.println("Maximum consecutive substring is "+matchMax(a));
}
/**
*
* @param text 这个是输入的字符串
* @return
*/
public static String matchMax(String text){
String tmp = "";
Map<Integer,String> map = new HashMap<>();
for (int i = 0; i < text.length()-1; i++) {
if(text.charAt(i)<text.charAt(i+1)){
tmp += text.charAt(i);
}
else {
tmp += text.charAt(i);
map.put(tmp.length(),tmp);
tmp = "";
}
}
//控制--》如果是从if中出来
if (tmp.length() > 0) {
tmp += text.charAt(text.length()-1);
map.put(tmp.length(), tmp);
}
int max = Collections.max(map.keySet());
return map.get(max);
}
}