java 字符串问题
来源:互联网 发布:福州锐捷网络招聘 编辑:程序博客网 时间:2024/06/02 03:47
1.判断两个字符串包含的字符是不是一样,顺序无关。例如,abcd和dcba就相同,但是abcd和abce是不相同的。
解决思路:如果两个字符串的length不一样,直接返回false;接着把两个字符串转为字符数组,并做快排。排序后就简单了,遍历两个数组,只要下标一样,字符不一样就立即返回false,
代码:
package basic.orderBy;import java.util.Scanner;/** * author tanbin * 判断两个字符串里面的字符的是不是一样,不管顺序。只要字符的种类一样,同样字符的数量一样。 * Created by Administrator on 2016/12/6. */public class EssenseString { public static void quicksort(char[] a,int x,int y){ if(x>=y){ return; } int mid = a[x]; int i = x; int j = y; while(i<j){ while(i!=j && a[j]>=mid) j--; while(i!=j && a[i]<=mid) i++; char temp; if(i==j){ temp = a[x]; a[x] = a[i]; a[i] = temp; }else{ temp = a[i]; a[i] = a[j]; a[j] = temp; } } quicksort(a,x,i); quicksort(a,i+1,y); } public static boolean compare(String s1,String s2){ if(s1.length()!=s2.length()){ return false; } char[] c1 = s1.toCharArray(); char[] c2 = s2.toCharArray(); quicksort(c1,0,c1.length-1); quicksort(c2,0,c2.length-1); for(int i=0;i<c1.length;i++){ if(c1[i] != c2[i]) return false; } return true; } public static void main(String[] args){ Scanner scanner = new Scanner(System.in); String s1,s2; s1 = scanner.nextLine(); s2 = scanner.nextLine(); if(compare(s1, s2)){ System.out.println("相同"); }else{ System.out.println("不相同"); } }}
2.反转字符串,这个问题很直接了,就是将字符串顺序倒过来。
解决思路:思路1,这里用到了递归的思想。和反转二叉树的思路一样(二叉树是最能体现递归的数据结构),递归的方法是先把根的左右子树的位置调换了,再递归的把左右子树的根传给递归函数。字符的做法是,把字符串分为两半,把这两半位子调换,再对这两半字符串做同样处理。
思路2:感觉上面的用递归不直观,我们可以把字符串转为字符数组,头和尾每个字符调换就可以了。
代码:
package basic.recursion;import java.util.Scanner;/** * author tanbin * 将字符串反转的几种方法 * Created by Administrator on 2016/12/6. */public class reverseString { public static String reverse(String s){ if(s.length()<=1){ return s; } String left = s.substring(0,s.length()/2); String right = s.substring(s.length()/2,s.length()); return reverse(right)+reverse(left); } public static void reverse2(char[] c){ int i=0; int j= c.length-1; char temp; while(i!=j && i<j){ temp =c[i]; c[i] = c[j]; c[j] = temp; i++; j--; } } public static void reverse3(char[] c){//利用栈,知道大小的数组的情况下用栈有点多余。 Stack stack = new Stack(new char[c.length]); for(int i=0;i<c.length;i++){ stack.push(c[i]); } for(int j=0;j<c.length;j++){ c[j] = stack.pop(); } } public static void main(String[] args){ Scanner scanner = new Scanner(System.in); //reverse String s = reverse(scanner.nextLine()); System.out.println(s); //reverse2 char[] c = s.toCharArray(); reverse2(c); for(int i=0;i<c.length;i++) { System.out.print(c[i]); } //reverse3 reverse3(c); System.out.println(); for(int i=0;i<c.length;i++) { System.out.print(c[i]); } }}class Stack{ private char[] container; int top=-1; public Stack(char[] c){ this.container = c; } public void push(char c){ top++; container[top] = c; } public char pop(){ char pop = container[top]; top--; return pop; }}
0 0
- 字符串比较问题(java)
- Java子字符串问题
- JAVA字符串比较问题
- Java字符串的问题!
- Java字符串问题Top10
- Java字符串问题Top10
- Java字符串问题Top10
- Java字符串问题Top10
- Java字符串问题Top10
- Java字符串问题Top10
- Java字符串问题Top10
- Java字符串问题Top10
- Java字符串问题Top10
- java中的字符串问题!
- Java字符串问题Top10
- java 字符串比较问题
- java-字符串问题
- java字符串分割问题
- 字符串subString方法的使用
- 简单的滑动冲突处理
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- poj Frequent values 3368
- 监听是否点击了home键将客户端推到后台
- java 字符串问题
- it好博客
- aliyun阿里云Maven仓库地址——加速你的maven构建
- sp<> 强指针类的用法
- RxBus使用总结
- JavaScript编写城市联动框和时间联动框
- 解决plsql导入后中文乱码
- ASP.NET网站程序防SQL注入式攻击方法
- 第一次调用JNI