题解 | #密码截取#

密码截取

http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

Java解法

基本思路

  1. 从i开始向两边扩展,判断最远可以向外延伸多少(奇偶的判定方法有些区别)
  2. 分最长子串是奇偶两种情况,最终每个i从两者中选出一个较大的
  3. 对所有i的最长子串进行排序,选出最长的
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String s = in.next();
		int[] maxLength1 = new int[s.length()];
		int[] maxLength2 = new int[s.length()];
		//如果最长子串是奇数
		for(int i=0;i<s.length();i++) {
			maxLength1[i] = 1;
			for(int j=0;j<Math.min(i-0, s.length()-i-1);j++) {
				if(s.charAt(i-j-1) != s.charAt(i+j+1)) {
					break;
				}else {
					maxLength1[i]++;
				}
			}
			maxLength1[i] = maxLength1[i]*2-1;
		}
		
		//如果最长子串是偶数
		for(int i=0;i<s.length();i++) {
			maxLength2[i]=0;
			for(int j=0;j<Math.min(i-0+1, s.length()-i-1);j++) {
				if(s.charAt(i-j) != s.charAt(i+j+1)) {
					break;
				}else {
					maxLength2[i]++;
				}
			}
			maxLength2[i] = maxLength2[i]*2;
		}
		
		//奇偶中选一个大的
		int[] maxLength = new int[s.length()];
		for(int i=0;i<s.length();i++) {
			maxLength[i] = Math.max(maxLength1[i], maxLength2[i]);
		}
		Arrays.sort(maxLength);
		System.out.println(maxLength[s.length()-1]);
	}
}
全部评论

相关推荐

豆泥🍀:同26届,加油,我也还没找到查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务