3 / 3
Sep 2010

I've written the following code for the next palindrome problem but everytime i get time limit exceeded . Please help :

import java.io.*;
public class Main
{
	Main()
	{
		try
		{
			int i,j,k,l,m = 0;
			String st,str,str1;
			StringBuffer buf;
			BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
			PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, "UTF-8"));
			l = Integer.parseInt(r.readLine());
			for(k=0;k<l;k++)
			{
				m = 0;
				st = r.readLine();
				str = st;
				str1 = st;
				buf = new StringBuffer(st.substring(0,(st.length()/2)));
				if((st.length()%2)==0)
				{
					str1 = st.substring(0,(st.length()/2)).concat(buf.reverse().toString());
				}
				else if((st.length()%2)!=0)
				{
					str1 = st.substring(0,(st.length()/2)+1).concat(buf.reverse().toString());
				}
				i = (st.length()/2)-1;
				j = i+1;
				if((st.length()%2)!=0)
				{
					j = i+2;
					str = replaceCharAt(st,(st.length()/2),Character.forDigit((Character.digit(st.charAt(st.length()/2),10)+1)%10,10));
					if(Character.digit(str.charAt(st.length()/2),10)!=0)
					{
						m++;
					}
				}
				while(i>=0)
				{
					if(Character.digit(st.charAt(i),10)>Character.digit(st.charAt(j),10))
					{
						str = "";
						break;
					}
					if(Character.digit(st.charAt(i),10)==Character.digit(st.charAt(j),10) && m==0)
					{
						str = replaceCharAt(str,i,Character.forDigit((Character.digit(st.charAt(i),10)+1)%10,10));
						if(Character.digit(str.charAt(i),10)!=0)
						{
							m++;
						}
					}
					if(Character.digit(st.charAt(i),10)<Character.digit(st.charAt(j),10))
					{
						if(m==0)
						{
							str = replaceCharAt(str,i,Character.forDigit((Character.digit(st.charAt(i),10)+1)%10,10));
						}
						st = str;
						str = "";
						break;
					}
					i--;
					j++;
				}
				if(!str.equals(""))
				{
					if(m==0)
					{
						str1 = new String("1");
						st = str1.concat(str);
					}
					else if(m!=0)
					{
						st = str;
					}
				}
				buf = new StringBuffer(st.substring(0,(st.length()/2)));
				if((st.length()%2)==0)
				{
					st = st.substring(0,(st.length()/2)).concat(buf.reverse().toString());
				}
				else if((st.length()%2)!=0)
				{
					st = st.substring(0,(st.length()/2)+1).concat(buf.reverse().toString());
				}
				/*System.*/out.println(st);
				out.flush();
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	String replaceCharAt(String s, int pos, char c)
	{
  		StringBuffer buf = new StringBuffer(s);
  		buf.setCharAt(pos,c);
  		return buf.toString();
	}
	public static void main(String args [])
	{
		new Main();
	}
}
  • created

    Sep '10
  • last reply

    Sep '10
  • 2

    replies

  • 459

    views

  • 2

    users

String operations are very costly. You should just use a character array and modify it in-place.

Suggested Topics

Want to read more? Browse other topics in JAVA based languages or view latest topics.