Nasıl bir dize kontrol etmek için bir palindrom düzenli ifadeler kullanarak?
Bu cevap mümkün olduğu röportaj bir soruydu
Nasıl bir dize kontrol etmek için bir palindrom düzenli ifadeler kullanarak?
p.s. "How to check if the given string is palindrome?" ve farklı dillerde cevap veriyor, ama düzenli ifadeler kullanan cevap. soru zaten yok
CEVAP
Bu sorunun cevabı "imkansız". Daha spesifik olarak, görüşmeci eğer hesaplama teorisi sınıfında dikkat eğer merak ediyor.
Hesaplama teorisi sınıf sonlu durum makineleri öğrendim. Sonlu durum makinesi düğümler ve kenarlar oluşur. Her kenar sonlu bir alfabenin bir harfi ile açıklamalı. Bir veya daha fazla düğüm" düğüm ve düğüm "düğüm. başlangıç "kabul özel Her harf olarak verilen bir kelime okunur biz traverse makineye verilen kenarı. Biz kabul bir devlet ise o zaman makine" kelime. "kabul eder ki
Düzenli ifade her zaman eşdeğer sonlu durum makinesine çevrilebilir. Ve düzenli ifade olarak aynı kelimeleri kabul eder veya reddeder o gerçek dünyada, bazı regexp dilleri keyfi fonksiyonlar için izin, bu sayılmaz).
İmkansız palindromes kabul eden sonlu durum makinesi kurmak için. Kanıt kolay düğüm, yani dize keyfi büyük bir sayı gerektiren bir dize inşa gerçeklere dayanır
x b^x (örn., bir^ aba, aabaa,,, .... aaabaaa aaaabaaaa)
x x bir kere tekrarlanan bir^. Bu en az x, 'b' x kez geri sayım için bir palindrom olduğunu emin olmalıyız. gördükten sonra düğümler gerektirir
Son olarak, geri orijinal soruya başlarken, bazı sonlu sabit uzunluk daha küçük olan tüm palindromes kabul eden bir düzenli ifade yazabilirsiniz görüşmeci söyleyebilirsin. Eğer orada hiç bir gerçek dünya uygulama gerektirir belirlenmesi palindromes sonra neredeyse kesinlikle vardır keyfi olarak uzun olanlar, böylece bu cevap gösteriyor ki ayırt teorik imkansızlıklar gerçek dünya uygulamaları. Yine de, gerçek regexp oldukça uzun, eşdeğer 4 satırı programı çok daha uzun (okuyucu için kolay egzersiz: palindromes tanımlayan bir program yazmak) olur.
Nasıl kullanarak/Catch olmadan bir diz...
Nasıl eğer bir satırı boş düzenli ifad...
Bir dize kontrol etmek için nasıl &quo...
Eğer bir dize geçerli bir adres olup o...
Nasıl bir Dize Java sayısal bir tip ol...