[Título de serie diario] máximo común divisor LeetCode 1071. cuerdas

título

Para las cadenas S y T, sólo el S = T + ... + tiempo T (T conectado a sí mismo una o más veces), se identificaron "T S puede ser divisible."
Devuelve la cadena más larga X, X puede cumplir con los requisitos, y X puede ser divisible str2 str1 divisible.

Fuente: Botón de estancia (LeetCode)
son propiedad de la deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.

solución del problema

En primer lugar, suponiendo que están hechas a dos cadenas (y hasta) X subcadena generado, entonces es fácil pensar en cadenas de S y T son cadenas de repetición de X, entonces S = k-ésima X, T = n X a, la S + T == T + S == (k + n) º X
entonces si S + T == T + S, a continuación, una solución, o cadena vacía se devuelve directamente indica que no hay solución.

S y T son entonces múltiplos de X, X es la longitud máxima de su máximo común divisor (el sujeto escrito)

código

public class Solution {
  public String gcdOfStrings(String str1, String str2) {
      if ((str1+str2).equals(str2+str1))
          return str1.substring(0,GCD(str1.length(),str2.length()));
      else
          return "";
  }
  public int GCD(int a,int b)
  {
      if(a==0) return b;
      if(b==0) return a;
      if(!(a%2==1)&&!(b%2==1))
      {
          return GCD(a>>1,b>>1)<<1;
      }
      else if(!(b%2==1))
      {
          return GCD(a,b>>1);
      }
      else if(!(a%2==1))
      {
          return GCD(a>>1,b);
      }
      else
      {
          return GCD(Math.abs(a-b),Math.min(a,b));
      }
  }
}

Supongo que te gusta

Origin www.cnblogs.com/JethroYu/p/12467001.html
Recomendado
Clasificación