数据结构-Java实现-简单回文
来源:互联网 发布:mysql 创建覆盖索引 编辑:程序博客网 时间:2024/06/09 19:49
基本回文字符串
//T(N)=O(N),S(N)=O(1)public class PalindromeString { public boolean isPalindrome(String str){ if(str==null||str.length()<=1){ return true; } for(int i=0,j=str.length()-1;i<j;i++,j--){ if(str.charAt(i)!=str.charAt(j)){ return false; } } return true; }}@Testpublic void test(){ System.out.println(isPalindrome("abcdcba")); System.out.println(isPalindrome("abcdeba"));}
回文字符串加强版
//只考虑字母和数字,忽略大小写,T(N)=O(N),S(N)=O(1)public class ValidPalindrome { public boolean isAlpha(char c){ if((c>='0'&&c<='9')||(c>='a'&&c<='z')){ return true; }else{ return false; } } public boolean isPalindrome(String s){ if(s==null||s.length()<=1){ return true; } s=s.toLowerCase(); for(int i=0,j=str.length()-1;i<j;i++,j--){ while(i<j&&!isAlpha(s.charAt(i)){i++;} while(i<j&&!isAlpha(s.charAt(j)){j--;}; if(str.charAt(i)!=str.charAt(j)){ return false; } } return true; }}@Testpublic void test(){ System.out.println(isPalindrome("A man, a plan, a canal; Panama")); System.out.println(isPalindrome("race a car"));}
回文数字
//不能使用数组、集合、字符串 S(N)=O(1)//负数不回文,单个数字回文/**x=1245421 *n=1245421 求整数位数方法wei() *t=1000000=10^(wei()-1) *利用%10求个位数字可得x/t%10求首位,n%10求末尾来判断首末两位是否相等 *///T(N)=O(N)public class PalindromeNumber{ public int wei(int x){ int count=0; while(x>0){ x/=10; count++; } return count; } public int pow(int m, int n){ int multy=1; for(int i=1;i<=n;i++){ multy*=m; } return multy; } public bollean isPalindrome(int x){ if(x<0){ return false; }else if(x<10){ return true; }else{ int wei=wei(x); int t=pow(10,wei-1); int half=wei/2; int n=x; for(int i=0;i<half;i++){ if(x/t%10==n^10){ t/=10; n/=10; }else{ return false; } } return true; } } @Test public void test(){ System.out.println(isPalindrome("12345654321")); System.out.println(isPalindrome("123455432")); }}
最长回文子串
public class LPS{ public boolean isPalindrome(String s, int start, int end){ for(int i=start, j=end; i<j; i++,j--){ if(s.charAt(i)!=s.charAt(j)){ return false; } } return true; } //穷举法暴力求解,列出所有子串依次判断 //T(N)=O(N^3),S(N)=O(1) public String longestPlindrome01(String s){ if(s==null||s.length()<=1){ return s; }else{ int n=s.length(); int max=0; //记录最长回文子串长度 int from=0; int to=1; for (int i=0;i<n;i++){ for(int j=i;j<n;j++){ if(isPalindrome(s, i, j)){ if(j-i+1>=max){ max=j-i+1; from=i; to=j; } } } } return s.substring(from, to+1); } } //中心扩展法,从中间往两边读是一样的,这样只用一次遍历 //T(N)=O(N^2),S(N)=O(1) public String longestPlindrome02(String s){ int maxLeft=0; int maxRight=0; int max=1; int n=s.length(); for(int i=0;i<n;i++){ int start=i; int end=i+1; int len=0; //子串长度 int left=right; int right=end; while(start>=0&&end<n){ if(s.charAt(start)==s.charAt(end)){ len=len+2; left=start; right=end; start--; end++; }else{ break; } } if(len>max){ maxLeft=left; maxRight=right; max=len; } start=i-1; end=i+1; len=1; //子串长度 left=right; right=end; while(start>=0&&end<n){ if(s.charAt(start)==s.charAt(end)){ len=len+2; left=start; right=end; start--; end++; }else{ break; } } if(len>max){ maxLeft=left; maxRight=right; max=len; } } return s.substring(maxLeft,maxRight+1); } //Manacher方法留白,日后再写吧,= =! T(N)=O(N) @Test public void test(){ System.out.println(longestPlindrome01("abcdabcdcba")); System.out.println(longestPlindrome02("hijkhijkkji")); }}
0 0
- 数据结构-Java实现-简单回文
- 数据结构-Java实现-简单递归
- Java实现简单图数据结构
- java判断回文字符串几种简单的实现
- java数据结构之单链表的简单实现
- java实现简单的散列数据结构
- 【数据结构】-简单选择排序Java实现
- 数据结构: Java中ArrayList的简单实现
- 数据结构: Java中LinkedList的简单实现
- 数据结构java实现之简单排序
- 数据结构-顺序表Java简单实现
- Java实现简单的数据结构(一)
- Java实现简单的数据结构(二)
- Java实现简单的数据结构(三)
- Java实现简单的数据结构(四)
- Java实现简单的数据结构(五)
- 字符串回文-Java实现
- Java实现-回文数
- Android 上拉加载 PullToRefresh
- 读入bmp格式图像文件
- Linux进程间通信——使用信号量
- Unicode字符列表(超完整)
- Tomcat server.xml配置示例
- 数据结构-Java实现-简单回文
- 支持向量机(2)
- 素数筛【模板】
- js函数 Number()、parseInt()、parseFloat()的区别:
- viewDidAppear什么时候调用?
- OpenJudge_P4976 硬币(DP+数论+容斥原理)
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- IOS开发音频播放之AVaudioplayer
- poj 2909