在字符串中找出连续最长的数字串

pingdiyishenglei 2013-05-18 02:44:52
题目描述

在字符串中找出连续最长的数字串,并把这个串的长度返回;如果长度相同,返回最后一个连续字符串

样例输入
abcd12345ed125ss123456789
abcd12345ss54321

样例输出
输出123456789,函数返回值9
输出54321,函数返回值5



函数原型:
int Continumax(String intputStr, StringBuffer outputStr)

输入参数:
String intputStr 输入字符串

输出参数:
StringBuffer outputStr 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串

返回值:
int 连续最长的数字串的长度

...全文
5640 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
julia_faneast 2014-06-27
  • 打赏
  • 举报
回复
求各位大神帮我看看这个代码哪里有错误:功能是求给定字符串中最长的连续递增数字串
private static String longestNumbers(String s) {
		// TODO Auto-generated method stub
		int begin = 0;
		int end = 0 ;
		int length = end - begin;
		for(int i = 0;i<s.length();i++){
			begin = end =i;
			if(s.charAt(i)>='0'&&s.charAt(i)<='9'&&end<s.length()){
				end++;
				for(int j = i;j<s.length()-1&&end<s.length();j++){
					if(s.charAt(j+1)-s.charAt(j)==1)
						end++;
					else
						break;
				}
			}
			int length1 = end - begin ;
			if(length<length1)
				length = length1;
		}
		return s.substring(begin, end);
	}
[/b]
馥钰 2014-05-29
  • 打赏
  • 举报
回复
static int Continumax(String intputStr, String outputStr){ //out=""; outputStr=""; String curStr=""; char[] cArray = intputStr.toCharArray(); for(int i=0; i<cArray.length; i++){ if(cArray[i] >= '0' && cArray[i] <= '9'){ curStr+=cArray[i]; }else{ //长度相同,保存后者,所以相等的时候也要交换,所以保留等号 outputStr = curStr.length() >= outputStr.length()? curStr : outputStr; curStr = ""; } } System.out.println(outputStr); return outputStr.length(); }
馥钰 2014-05-29
  • 打赏
  • 举报
回复
馥钰 2014-05-29
  • 打赏
  • 举报
回复
static int Continumax(String intputStr, String outputStr){ //out=""; outputStr=""; String curStr=""; char[] cArray = intputStr.toCharArray(); for(int i=0; i<cArray.length; i++){ if(cArray[i] >= '0' && cArray[i] <= '9'){ curStr+=cArray[i]; }else{ outputStr = curStr.length() >= outputStr.length()? curStr : outputStr; curStr = ""; } } System.out.println(outputStr); return outputStr.length(); }
菜鸟软件 2013-12-31
  • 打赏
  • 举报
回复
引用 40 楼 sk0sk 的回复:
public static int longestNumberStr(String str){
		int maxLen = 0;
		int curLen = 0;
		char[] cArray = str.toCharArray();
		for(int i=0; i<cArray.length; i++){
			if(cArray[i] >= '0' && cArray[i] <= '9'){
				curLen ++;
				if(i == cArray.length-1){
					maxLen = curLen > maxLen? curLen : maxLen; 
					curLen = 0;
				}
			}else{
				maxLen = curLen > maxLen? curLen : maxLen; 
				curLen = 0;
			}
		}
		System.out.println(maxLen);
		return maxLen;
	}
现在是输出长度,输出字符串的时候再稍微已修改即可。
菜鸟软件 2013-12-31
  • 打赏
  • 举报
回复
public static int longestNumberStr(String str){
		int maxLen = 0;
		int curLen = 0;
		char[] cArray = str.toCharArray();
		for(int i=0; i<cArray.length; i++){
			if(cArray[i] >= '0' && cArray[i] <= '9'){
				curLen ++;
				if(i == cArray.length-1){
					maxLen = curLen > maxLen? curLen : maxLen; 
					curLen = 0;
				}
			}else{
				maxLen = curLen > maxLen? curLen : maxLen; 
				curLen = 0;
			}
		}
		System.out.println(maxLen);
		return maxLen;
	}
菜鸟软件 2013-12-31
  • 打赏
  • 举报
回复
public static int longestNumberStr(String str){ int maxLen = 0; int curLen = 0; char[] cArray = str.toCharArray(); for(int i=0; i<cArray.length; i++){ if(cArray[i] >= '0' && cArray[i] <= '9'){ curLen ++; if(i == cArray.length-1){ maxLen = curLen > maxLen? curLen : maxLen; curLen = 0; } }else{ maxLen = curLen > maxLen? curLen : maxLen; curLen = 0; } } System.out.println(maxLen); return maxLen; }
liyvzheng 2013-06-30
  • 打赏
  • 举报
回复
很好 学习拉
花木兰1闪21A 2013-05-20
  • 打赏
  • 举报
回复
引用
各位大神写得都很好,但是输出的都不是连续最长的数字串。
are you sure??我都跑出来了怎么会不是?你把你那个输出不是的串发出来我看看
Inhibitory 2013-05-20
  • 打赏
  • 举报
回复
用正则查找非常快捷
pingdiyishenglei 2013-05-20
  • 打赏
  • 举报
回复
各位大神写得都很好,但是输出的都不是连续最长的数字串。
花木兰1闪21A 2013-05-20
  • 打赏
  • 举报
回复
再给你个版面,我想你问题应该解决了吧?

    public static int Continumax(String intputStr, StringBuffer outputStr) {
        List<String> digitList = new ArrayList<String>();//转化为list方便操作
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(intputStr);
        while (matcher.find()) {
            digitList.add(matcher.group(0));
        }
        if (digitList.isEmpty()) {
            System.out.println("没有数字串!");
            return 0;
        }
        for (int i = digitList.size() - 1; i >= 0; i--) {
            if (!isContinue(digitList.get(i).toCharArray())) {
                digitList.remove(i);
            }
        }
        Collections.sort(digitList, new Comparator<Object>() {
            @Override
            public int compare(Object o1, Object o2) {
                int thisLength = String.valueOf(o1).length();
                int otherLength = String.valueOf(o2).length();
                return thisLength - otherLength;
            }
        });
        System.out.println("最大连续数字串为:" + digitList.get(digitList.size() - 1) + "其长度为:" + digitList.get(digitList.size() - 1).length());
        return digitList.get(digitList.size() - 1).length();
    }

    private static boolean isContinue(char[] array) {
        return Math.abs(array[array.length - 1] - array[0]) == array.length - 1;
    }

    public static void main(String[] arg) {
        Continumax("abcd12345ss54321", null);
    }
花木兰1闪21A 2013-05-20
  • 打赏
  • 举报
回复
这是你想要的?

  public static int Continumax(String intputStr, StringBuffer outputStr) {
        List<String> digitList = new ArrayList<String>();//转化为list方便操作
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(intputStr);
        while (matcher.find()) {
            digitList.add(matcher.group(0));
        }
        if (digitList.isEmpty()) {
            System.out.println("没有数字串!");
            return 0;
        }
        int maxLength = 0;
        String maxValue = "";
        for (int i = digitList.size() - 1; i >= 0; i--) {
            if (!isContinue(digitList.get(i).toCharArray())) {
                digitList.remove(i);
            } else if (digitList.get(i).length() >= maxLength) {
                maxLength = digitList.get(i).length();
            } else {
                digitList.remove(i);
            }
        }
        int startIndex = 0;
        for (String s : digitList) {
            if (intputStr.lastIndexOf(s) >= startIndex) {
                startIndex = intputStr.lastIndexOf(s);
                maxValue = s;
                maxLength = s.length();
            }
        }
        System.out.println("最大连续数字串为:" + maxValue);
        System.out.println("其长度为:" + maxLength);
        return maxLength;
    }
    private static boolean isContinue(char[] array) {
        return Math.abs(array[array.length - 1] - array[0]) == array.length - 1;
    }
    public static void main(String[] arg) {
        Continumax("abcd12ss34e891", null);
    }
Inhibitory 2013-05-20
  • 打赏
  • 举报
回复
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Hello {
    public static void main(String[] args) {
        String str = "abcd12345ed125ss123456789";
        String result = null;

        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(str);

        while (matcher.find()) {
            String matched = matcher.group(0);

            if ((result == null) || (matched.length() >= result.length())) {
                result = matched;
            }
        }

        System.out.println(result);
    }
}
花木兰1闪21A 2013-05-20
  • 打赏
  • 举报
回复
引用
因为123457不是连续数字串
按你的说 String str=12345679adk中是没有连续的数字串的?你敢说1234567不是?如果你认为不是那我觉得你这题就很简单了,并且这种思路我是接受不了的。所以我不写了。
花木兰1闪21A 2013-05-20
  • 打赏
  • 举报
回复
引用
29楼的大神确实功力深厚,但是还有一点小瑕疵,就是输入54321test123457,要输出54321
我是按我的理解做的,我觉得应该是12345,难不成123457中不存在连续的数字串?正常人一看就知道应该有并且是12345,这个长度和54321相同,说相同时取后面的,所以我输出是12345
pingdiyishenglei 2013-05-20
  • 打赏
  • 举报
回复
因为123457不是连续数字串
pingdiyishenglei 2013-05-20
  • 打赏
  • 举报
回复
29楼的大神确实功力深厚,但是还有一点小瑕疵,就是输入54321test123457,要输出54321
花木兰1闪21A 2013-05-20
  • 打赏
  • 举报
回复
我改进了一下你在试试

 public static int Continumax(String intputStr, StringBuffer outputStr) {
        char[] charArray = intputStr.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < charArray.length; i++) {
            if (Character.isDigit(charArray[i])) {
                sb.append(charArray[i]);
            } else {
                sb.append(",");
            }
        }
        String[] digitArray = sb.toString().replaceAll("(,)+", ",").split(",");//得到数字数组
        if (digitArray.length <= 1) {
            System.out.println("没有数字串!");
            return 0;
        }
        List<String> digitList = new ArrayList<String>(Arrays.asList(digitArray));//转化为list方便操作
        List<String> positiveDigitList = fetchContinueDigitByPositiveSort(digitList, true);//得到正向连续的数字比如1234,345
        List<String> backDigitList = fetchContinueDigitByPositiveSort(digitList, false);//得到反向连续的数字比如4321,765
        List<String> lastList = new ArrayList<String>();
        lastList.addAll(positiveDigitList);
        lastList.addAll(backDigitList);
        int maxLength = 0;
        String maxValue = "";
        List<String> endStrList = new ArrayList<String>();
        for (String s : lastList) {         //找出最长并且是最后一个的值和长度
            if (s.length() > maxLength) {
                maxLength = s.length();
            }
        }
        for (String s : lastList) {         //找出最长并且是最后一个的值和长度
            if (s.length() == maxLength) {
                endStrList.add(s);
            }
        }
        int startIndex = 0;
        for (String s : endStrList) {
            if (intputStr.lastIndexOf(s) >= startIndex) {
                startIndex = intputStr.lastIndexOf(s);
                maxValue = s;
                maxLength = s.length();
            }
        }
        System.out.println("最大连续数字串为:" + maxValue);
        System.out.println("其长度为:" + maxLength);
        return maxLength;
    }

    private static List<String> fetchContinueDigitByPositiveSort(List<String> digitList, boolean isPositive) {
        List<String> lastDigitList = new ArrayList<String>();
        for (String s : digitList) {
            if (s.equals("")) {
                continue;
            }
            char[] charArray = s.toCharArray();
            int start = Integer.parseInt(String.valueOf(charArray[0]));
            int begin = Integer.parseInt(String.valueOf(charArray[0]));
            int startIndex = 0;
            if (charArray.length == 1) {
                lastDigitList.add(String.valueOf(start));
                return lastDigitList;
            }
            for (int j = 1; j < charArray.length; j++) {
                if (isPositive) {
                    if (begin + 1 == Integer.parseInt(String.valueOf(charArray[j])) && j != charArray.length - 1) {
                        begin = begin + 1;
                        continue;
                    }
                } else {
                    if (begin - 1 == Integer.parseInt(String.valueOf(charArray[j])) && j != charArray.length - 1) {
                        begin = begin - 1;
                        continue;
                    }
                }
                begin = Integer.parseInt(String.valueOf(charArray[j]));
                if (start == begin) {
                    lastDigitList.add(String.valueOf(start));
                } else if (j == charArray.length - 1 && ((isPositive && Integer.parseInt(String.valueOf(charArray[j])) - 1 == Integer.parseInt(String.valueOf(charArray[j - 1])))
                        || (Integer.parseInt(String.valueOf(charArray[j])) + 1 == Integer.parseInt(String.valueOf(charArray[j - 1]))))) {
                    lastDigitList.add(String.valueOf(charArray).substring(startIndex, j + 1));
                } else {
                    lastDigitList.add(String.valueOf(charArray).substring(startIndex, j));
                    if (j == charArray.length - 1) {
                        lastDigitList.add(String.valueOf(charArray[j]));
                    }
                }
                start = begin;
                startIndex = j;
            }

        }
        return lastDigitList;

    }

    public static void main(String[] arg) {
        Continumax("54321test123457 ", null);
    }
花木兰1闪21A 2013-05-20
  • 打赏
  • 举报
回复
发错了,是这个abcd12ss34e891

run:
最大连续数字串为:89
其长度为:2
成功构建 (总时间: 1 秒)
加载更多回复(23)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧